在多行上搜索和替换模式

时间:2012-06-07 18:03:24

标签: regex sed

我有一个类似

的模式
Fixed pattern
text which can change(world)

我想用

替换它
Fixed pattern
text which can change(hello world)

我正在尝试使用

cat myfile | sed -e "s#\(Fixed Pattern$A_Z_a_z*\(\)#\1 hello#g > newfile

更新: 上面的单词世界也是一个变量,并将改变 在表达式之后遇到第一个括号后,基本上添加hello。

提前致谢。

2 个答案:

答案 0 :(得分:3)

假设您的目标是在'hello '之后的行上的每个左括号中添加'Fixed pattern',这是一个应该有效的解决方案:

sed -e '/^Fixed pattern$/!b' -e 'n' -e 's/(/(hello /' myfile

以下是每个部分的解释:

/^Fixed pattern$/!b    # skip all of the following commands if 'Fixed pattern'
                       #   doesn't match
n                      # if 'Fixed pattern' did match, read the next line
s/(/(hello /           # replace '(' with '(hello '

答案 1 :(得分:2)

要使用sed执行此操作,请使用n

sed '/Fixed pattern/{n; s/world/hello world/}' myfile

您可能需要更加小心,但这应该适用于大多数情况。每当sed看到Fixed pattern(您可能想要使用行锚^$)时,它将读取下一行,然后将替换应用于它。