awk sub/gsub 重复结束分隔符的 2 个匹配项之间的子字符串
awk sub/gsub a substring between 2 matches with end-delimiter repeated
我有一个字符串 (file
) :
2 61009818 . TAGG T . . ad_alt=9;ad_ref=48;denovo=NA;dp_bin=50;
如何将子字符串 ad_ref=48
替换为 example=something
,以获得:
2 61009818 . TAGG T . . ad_alt=9;example=something;denovo=NA;dp_bin=50;
用awk
替换?
我试过了:
awk '{ sub(/(ad_ref=.*\;)/,"example=something")} 1' file
但它会替换所有内容,从第一次匹配到行尾:
# output
2 61009818 . TAGG T . . ad_alt=9;example=something
虽然我只需要替换第一个 ;
之前的字符。
我找到了不同的帖子,但所有帖子都基于唯一的结束定界符,如何告诉命令仅替换开始定界符和第一个结束定界符之间的部分(;
在我的例子中)?
在此先感谢您的帮助!
$ awk '{sub(/ad_ref=[^;]*/,"example=something")} 1' file
2 61009818 . TAGG T . . ad_alt=9;example=something;denovo=NA;dp_bin=50;
$ sed 's/ad_ref=[^;]*/example=something/' file
2 61009818 . TAGG T . . ad_alt=9;example=something;denovo=NA;dp_bin=50;
我有一个字符串 (file
) :
2 61009818 . TAGG T . . ad_alt=9;ad_ref=48;denovo=NA;dp_bin=50;
如何将子字符串 ad_ref=48
替换为 example=something
,以获得:
2 61009818 . TAGG T . . ad_alt=9;example=something;denovo=NA;dp_bin=50;
用awk
替换?
我试过了:
awk '{ sub(/(ad_ref=.*\;)/,"example=something")} 1' file
但它会替换所有内容,从第一次匹配到行尾:
# output
2 61009818 . TAGG T . . ad_alt=9;example=something
虽然我只需要替换第一个 ;
之前的字符。
我找到了不同的帖子,但所有帖子都基于唯一的结束定界符,如何告诉命令仅替换开始定界符和第一个结束定界符之间的部分(;
在我的例子中)?
在此先感谢您的帮助!
$ awk '{sub(/ad_ref=[^;]*/,"example=something")} 1' file
2 61009818 . TAGG T . . ad_alt=9;example=something;denovo=NA;dp_bin=50;
$ sed 's/ad_ref=[^;]*/example=something/' file
2 61009818 . TAGG T . . ad_alt=9;example=something;denovo=NA;dp_bin=50;