sed用文字替换换行符和文字?

时间:2017-03-20 18:00:03

标签: 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

3 个答案:

答案 0 :(得分:1)

awk救援!

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

或者设置ORS并使用print

答案 1 :(得分:1)

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

here is the explanation

答案 2 :(得分:1)

正如评论中所提到的,Perl可能更适合这种多线任务:

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

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