使用sed替换字符串并带有条件。

3
我有一个文件,其中包含多行文本,每一行的格式都是这样的。
2011-07-10 condition hhh aaa: value bbb
2011-07-10 condition ccc aaa: value bbb

我想使用sed命令找到位于"aaa:"和"bbb"之间的值字符串,并在满足条件后将其替换为"gotit",该条件是其后的字符串为"ccc"。经过sed处理后,该文件变成:
  2011-07-10 condition hhh aaa: value bbb
  2011-07-10 condition ccc aaa: gotit bbb
2个回答

5

考虑到我对sed/regex的知识有限:

sed 's/\(condition ccc.*aaa: \).*\( bbb$\)/\1gotit\2/' file

抱歉,我没有说清楚,在ccc和aaa之间有一些其他的文本,只是ccc必须出现在这一行中。 - jasonfungsing
4
好的,请试试这个命令:sed 's/\(condition ccc.*aaa: \).*\( bbb$\)/\1gotit\2/' file,该命令会替换文件中所有匹配正则表达式 \(condition ccc.*aaa: \).*\( bbb$\) 的文本,并把匹配结果中的 \1\2 替换为字符串 gotit - Manny D

4
这是更为合理的解释:
sed '/ccc/{ s/\(.*aaa: \).*\( bbb\)/\1gotit\2/g }' inputfile

sed 只作用于包含 ccc 的行。


很抱歉打断你的话题。如果我想在一个较大的字符串中搜索和替换两个字符串“ccc”和“eee”,该怎么做?使用以下命令:sed '/ccc*\|eee*/{ s/\(.*aaa: \).*\( bbb\)/\1gotit\2/g }' inputfile - anishjp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接