是否可以使用 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"