【问题标题】:How to use sed to replace only the first occurrence?如何使用 sed 仅替换第一次出现?
【发布时间】:2017-05-24 05:05:51
【问题描述】:

这是我的命令:

sed -i -E  's/(<Connector port=)([a-zA-Z0-9"-])+/\1"VALUE10"/g' server.xm

当我执行这个c时,文件中的所有事件都已被替换。

如何使用 sed 仅替换我文件中的第一个匹配项?

【问题讨论】:

标签: linux unix sed


【解决方案1】:

只需使用 awk。使用 GNU awk 进行 gensub() 和就地编辑:

awk -i inplace '!f{$0=gensub(/(<Connector port=)[[:alnum:]"-]+/,"\\1\"VALUE10\"","g"); f=1} 1' server.xm

【讨论】:

    【解决方案2】:

    查找文件中的第一个匹配项:

    first=$( egrep -n 'Connector port=[a-zA-Z0-9"-]' server.xm | head -1 | cut -d: -f1 )
    

    然后,在该行替换:

    sed -i -E "${first}s/(<Connector port=)([a-zA-Z0-9\"-])+/\1\"VALUE10\"/g" server.xm
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 2021-12-05
      • 2014-01-28
      • 1970-01-01
      • 2012-02-27
      相关资源
      最近更新 更多