sed:在文件中通过regex内联找到的文本上有多个字符的更改



我想使用正则表达式在文件中查找特定的文本区域。然后,仅在这些区域,我想执行多个更改,即将所有内容更改为小写,然后删除以下字符[.,\]。经过多次尝试和错误,我得出了以下结论:

sed -r -E -i '/^((#)([0-9]+.[0-9]+){1}(.)+())/s|[.,/]||g; s|[A-Z]|L&|g' filename

但是这些更改将应用于整个文件。有什么想法吗?一般来说,我如何简化内联更改,即使用上一个更改的输出并应用新的更改(可能将其提供给另一个(?或者这不是应该怎么做?

这可能对你有用(GNU sed(:

sed 's#foo#n&n#g
s#.*#echo '''&'''|sed '''/^foo$/{s/bar/baz/;s/qwe/rty/g}'''#e
s#n##g' file

在每一行和整个文件中,用换行符将require match括起来。

在每一行中应用第二个与匹配完全一致的sed调用,然后对随后匹配的模式应用特定或全局替换。

在每一行处理完成之前,移除换行符并打印结果。

最新更新