如何使用带有前导空格的展示位置替换sed中的多行字符串

时间:2017-10-12 02:45:33

标签: awk sed

我有一个像

这样的行的文件
 something 
-----------

something之后的前导空格和尾随空格。我想用

替换它
 other 
-------

并保留前导和尾随空格。怎么样?

3 个答案:

答案 0 :(得分:1)

这可能适合你(GNU sed):

sed -i '/^ something $/{:a;N;/^--*$/M!ba;s/something/other/}' file

收集开始和结束标记之间的行,然后用替代标记替换所需的字符串。

N.B。使用M标志在多行内完全匹配。

答案 1 :(得分:1)

sed用于单独行的简单替换,全部,对于你应该使用awk的任何其他内容:

$ awk 'n{$0=substr($0,1,n); n=0} {sub(/^ something $/," other "); n=length()}1' file
 other
-------

这适用于任何UNIX机器上任何shell中的任何awk。

答案 2 :(得分:0)

sed可以使用逗号分隔的正则表达式匹配多行。并使用c命令替换范围内的所有内容。要使c命令不忽略前导空格,请在其后使用反斜杠。 e.g。

sed -i.original '/^ something $/,/-----------$/c\ other \n-------' input-filename