如何使用sed只替换第一次出现?

时间:2017-05-23 14:52:56

标签: linux unix sed

这是我的命令:

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

当我执行此cAll事件已被替换为文件。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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