替换 sed 或 awk 中的多行

gli*_*oli 9 scripting sed awk perl

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

Mic*_*zek 21

sed 在这方面做得很糟糕,因为它一次只运行一行。我见过这样做的唯一体面的技术是这个,它涉及将整个文件存储在 sed 的保持缓冲区中,然后立即对其进行操作:

sed -n '1h;1!H;${g;s/search/replace/;p;}'
Run Code Online (Sandbox Code Playgroud)

如果可以,使用 perl 来完成此操作要容易得多:

perl -0pe 's/search/replace/'
Run Code Online (Sandbox Code Playgroud)

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

  • @Michael `-0` 将记录分隔符设置为空,因此将立即读取整个文件而不是逐行读取。`-p` 使其打印替换后的结果。`-e` 让它将下一个参数作为要运行的表达式,而 `s/search/replace/` 就是该表达式 (2认同)