【发布时间】:2017-05-24 05:05:51
【问题描述】:
这是我的命令:
sed -i -E 's/(<Connector port=)([a-zA-Z0-9"-])+/\1"VALUE10"/g' server.xm
当我执行这个c时,文件中的所有事件都已被替换。
如何使用 sed 仅替换我文件中的第一个匹配项?
【问题讨论】:
这是我的命令:
sed -i -E 's/(<Connector port=)([a-zA-Z0-9"-])+/\1"VALUE10"/g' server.xm
当我执行这个c时,文件中的所有事件都已被替换。
如何使用 sed 仅替换我文件中的第一个匹配项?
【问题讨论】:
只需使用 awk。使用 GNU awk 进行 gensub() 和就地编辑:
awk -i inplace '!f{$0=gensub(/(<Connector port=)[[:alnum:]"-]+/,"\\1\"VALUE10\"","g"); f=1} 1' server.xm
【讨论】:
查找文件中的第一个匹配项:
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
【讨论】: