Linux sed是否用literal替换换行符和literal?

Linux sed是否用literal替换换行符和literal?,linux,bash,unix,sed,Linux,Bash,Unix,Sed,我试图用此命令替换此文本,但它不起作用: sed -e 's/\nnumber2/number2/g' fffff > fffff 这是我的文件包含的内容: number1;gAMMA number2;gat number1;zilla number2;dog 这是我的预期输出: number1;gAMMAnumber2;gat number1;zillanumber2;dog awk救援 $ awk '/^number2/ {n=1} {printf "%s"(n

我试图用此命令替换此文本,但它不起作用:

sed -e 's/\nnumber2/number2/g'  fffff > fffff
这是我的文件包含的内容:

number1;gAMMA
number2;gat
number1;zilla
number2;dog
这是我的预期输出:

number1;gAMMAnumber2;gat
number1;zillanumber2;dog

awk
救援

$ awk '/^number2/ {n=1} 
       {printf "%s"(n?"\n":""), $0; n=0}' file > tmp && mv tmp file

或者可以设置
ORS
并使用
print
awk
进行救援

$ awk '/^number2/ {n=1} 
       {printf "%s"(n?"\n":""), $0; n=0}' file > tmp && mv tmp file
sed ':a;N;$!ba;s/\nnumber2/number2/g' fffff > fffff
或者设置
ORS
并使用
print

sed ':a;N;$!ba;s/\nnumber2/number2/g' fffff > fffff


如评论中所述,Perl可能更适合此多行任务:

perl -i.bak -pe 's/(number1[^\n]*)\n/\1/' yourfile.txt

使用Perl可能有一种更优雅的方法来实现这一点,但这是相当直接的。它还将创建一个扩展名为
.bak
的备份文件,如果您不想这样做,请省略
bak
部分。

正如前面的注释所述,Perl可能更适合此多行任务:

perl -i.bak -pe 's/(number1[^\n]*)\n/\1/' yourfile.txt

使用Perl可能有一种更优雅的方法来实现这一点,但这是相当直接的。它还将创建一个扩展名为
.bak
的备份文件,如果您不想这样做,请省略
bak
部分。

number1;gAMMAnumber2;gat编号1;zillanumber2;狗编号1;gAMMAnumber2;gat/n编号1;zillanumber2;问题是:(1)不要读取和重定向到同一个文件。为了安全起见,您必须写入另一个文件。(2)
sed
一次只读取一行,因此不能替换换行符。但我建议改为使用
perl
。(3) 您可能需要编写
$”…\n..
而不是
..\n..
.number1;gAMMAnumber2;gat编号1;zillanumber2;狗编号1;gAMMAnumber2;gat/n编号1;zillanumber2;问题是:(1)不要读取和重定向到同一个文件。为了安全起见,您必须写入另一个文件。(2)
sed
一次只读取一行,因此不能替换换行符。但我建议改为使用
perl
。(3) 您可能需要编写
$”…\n..
,而不是
..\n..