我有一些文字内容。
我想用管道替换[]
文本!!!
。
我可以使用这个脚本:cat myfile | sed -r 's/\[.+\]/!!!/'
我怎样才能做到多线,所以.
可以处理 CR、LF 等?
也许 awk、perl 或类似的东西?
最简单的解决方案是首选。
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
sed -n 'H; $ {x;s/\[.+\]/!!!/p;}' myfile
sed 默认逐行工作,因此默认情况下没有 CR LF。H,捕获缓冲区中读取的每一行,$ 在最后一行做出反应(因此所有文件都被缓冲,包括 CR),x 检索缓冲区并且你的 sed 在 p 打印结果之前应用在整体上(-n of sed remove指定打印以外的其他输出)