我有一些文字内容。
我想使用管道将[]
中的文字替换为!!!
我可以使用这个脚本:cat myfile | sed -r 's/\[.+\]/!!!/'
我怎样才能实现多线,所以.
可以处理CR,LF等?
也许awk,perl或类似的东西?
最简单的解决方案更可取。
答案 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其他输出比指定的打印)