我有一个类似
的模式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。
提前致谢。
答案 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
(您可能想要使用行锚^
和$
)时,它将读取下一行,然后将替换应用于它。