0

我有一些文字内容。

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

我怎样才能做到多线,所以.可以处理 CR、LF 等?
也许 awk、perl 或类似的东西?
最简单的解决方案是首选。

4

2 回答 2

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
于 2013-10-30T13:23:16.600 回答
1
sed -n 'H; $ {x;s/\[.+\]/!!!/p;}' myfile

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

于 2013-10-31T12:33:07.190 回答