【问题标题】:using sed to find a word in a line and replace the part next to the word使用 sed 在一行中查找一个单词并替换该单词旁边的部分
【发布时间】:2019-03-15 11:36:03
【问题描述】:

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

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

请建议如何使用 sed 进行此操作

【问题讨论】:

    标签: bash shell scripting


    【解决方案1】:

    给你:

    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,看看会发生什么。)

    【讨论】:

      猜你喜欢
      • 2016-08-19
      • 2012-04-23
      • 1970-01-01
      • 2014-10-16
      • 2020-12-10
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      相关资源
      最近更新 更多