使用sed在一行中找到一个单词并替换单词旁边的部分

时间:2019-03-15 11:36:03

标签: bash shell scripting

我在Linux机器上的xxxxx(HOST=xxxx.xx.com)这样的文件中进行了一些测试

我想用HOST搜索并替换=直到)之后的部分

请建议如何使用sed

1 个答案:

答案 0 :(得分:0)

您在这里:

sed -e 's/\((HOST=\)[^()]*\()\)/\1REPLACEMENT\2/' myfile

如果您希望Sed就地编辑(更改) myfile (注意:这将更改 myfile 的内容),则:

sed -e 's/\((HOST=\)[^()]*\()\)/\1REPLACEMENT\2/' -i myfile

工作原理

s///是Sed的替代命令。因此,s/foo/bar/foo替换每次出现的bar

解决问题的建议模式包括三个部分:

  • (HOST=
  • [^()]*
  • )

中间部分匹配不带括号的任何内容,中间部分结尾的星号*表示要匹配非括号的零个或多个字符。在您的示例中,“ xxxx.xx.com”是匹配的。

如图所示,\(的第一部分和最后一部分由转义括号捕获\)。有两个捕获。在替换模式中,\1\2打印捕获的文本。 (如果不确定我刚才说的是什么,请尝试使用\1\1\1而不是\1来查看其效果。)