如何使用管道在linux控制台中用另一个文本替换一些文本?

时间:2013-10-30 12:30:18

标签: linux shell sed console

我有一些文字内容。

我想使用管道将[]中的文字替换为!!! 我可以使用这个脚本:cat myfile | sed -r 's/\[.+\]/!!!/'

我怎样才能实现多线,所以.可以处理CR,LF等? 也许awk,perl或类似的东西?
最简单的解决方案更可取。

2 个答案:

答案 0 :(得分:2)

Perl是一个不错的选择:

perl -0777 -pe 's/\[.*?\]/!!!/gs' myfile

一个例子

perl -0777 -pe 's/\[.*?\]/!!!/gs' << END
this is [some
text in brackets] blah blah
END
this is !!! blah blah

答案 1 :(得分:1)

sed -n 'H; $ {x;s/\[.+\]/!!!/p;}' myfile

默认情况下默认使用sed工作,因此默认情况下没有CR LF。 H,在缓冲区中读取每一行,$ last在最后一行反应(所以所有文件都缓冲包括CR),x后退缓冲区并且你的sed在整体上应用p之前打印结果(-n of sed remove其他输出比指定的打印)