linux - 用空格替换所有双换行符

linux - 用空格替换所有双换行符

是否可以使用 sed、awk、grep、tr 或任何需要的程序仅替换文本文件中的双换行符?

this

is

data
this

is

more

data

我需要做的是用空格替换所有双换行符(\n\n,没有空格),但保留所有单换行符,以便所有数据点都位于它们自己的行上。

this is data
this is more data

这可能吗?

答案1

尝试

    sed ':a;N;$!ba;s/\n\n/ /g'  filename

这将首先读取整个文件,然后将双换行符(仅替换这些!)替换为空格。这个技巧(读取整个文件)是必要的,因为大多数 GNU/Linux 实用程序一次处理一行输入,这会给您错误的结果。

答案2

只是另一个变体:一个awk版本

awk 'BEGIN{RS="\n\n" ; ORS=" ";}{ print }' 

答案3

添加到@MariusMatutiae 的答案:如果文件太大而无法读取到内存,您可以使用经典但速度慢得多的方法:

EMPTY=0
BUFFER=""
while read L; do
  if test -z "$L"; then
    EMPTY=$(($EMPTY+1))
    BUFFER="$BUFFER\n"
  else
    if test $EMPTY -lt 2; then
      echo -en "$BUFFER"
    else
      echo " "
    fi
    echo "$L"
    BUFFER=""
    EMPTY=0
  fi
done < filename
echo -ne "$BUFFER"

相关内容