在sed或awk中替换多行[关闭]


9

我正在尝试使用sed或awk替换smb文件中的5行,但是我只是不知道如何处理换行符。


6
当然,sed和awk可以做到这一点,但是我很难确切地知道您的问题是什么。到底是什么引起您的麻烦?插入新行?更换它们?
frabjous

Answers:


19

Sed对此很不好,因为它一次只能运行一行。我见过的唯一可行的技术就是这项技术,它涉及将整个文件存储在sed的保持缓冲区中,然后立即对其进行操作:

sed -n '1h;1!H;${g;s/search/replace/;p;}'

如果可以的话,使用perl可以轻松得多:

perl -0pe 's/search/replace/'

search可以包含\ns以表示换行符


1
+1为sed多线。
拉泽尔

您能解释一下perl的命令行参数做什么吗?
迈克尔

1
@Michael -0将记录分隔符设置为null,因此将一次读取整个文件,而不是逐行读取。-p使它在替换后打印结果。-e它是否将下一个参数作为表达式运行,并且s/search/replace/该表达式是
Michael Mrozek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.