在包含另一个模式的行上替换模式

时间:2015-07-31 15:35:48

标签: sed pattern-matching substitution

说文件有

ABC DEF ,No
IMD DEF ,NO
ANC KOJD ,NO
ABC MSL ,NO

如何使用sed仅将,No替换为XYZ,No仅包含ABC的行?

所以最后的输出是

ABC DEF XYZ ,No
IMD DEF ,NO
ANC KOJD ,NO
ABC MSL XYZ,NO

2 个答案:

答案 0 :(得分:1)

使用:

sed -r '/ABC/s/(,N[oO])/XYZ\1/' file

这会使用sed '/pattern/s/find/replace/' file,它会在包含s/find/replace/的所有行中替换pattern

在这种情况下,我们捕获,No,因为它可以是大写或小写,以便打印回来。

测试

$ sed -r '/ABC/s/(,N[oO])/XYZ\1/' a
ABC DEF XYZ,No
IMD DEF ,NO
ANC KOJD ,NO
ABC MSL XYZ,NO

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed '/ABC/s/,no/XYZ &/i' file

这适用于no的所有情况,但是如果您只想满足NoNO使用:

sed '/ABC/s/,N[oO]/XYZ &/' file