用awk中的其他字符替换字符串的子字符串

Replace substring of a string of characters with other characters in awk

我有一个包含很长字符串的文件,我想用 Ns 替换其中的一个子字符串。示例:

测试 ABCDABCDABCD

我想用awk命令和sed用所有字母N替换它的一个子串,从索引5到8的所有字符,所以字母N的总长度是4。

输出

ABCDNNNNABCD

我试过这样的事情:

awk '{ v=substr([=11=],5,4); sed -i "s/$v/N/g";print substr([=11=],1,4)""v""substr([=11=],9,12)}' test

然而,这个命令似乎给出了这个输出:

ABCDABCDABC

并且没有进行替换

我想在代码中包含从哪里开始替换的索引号(例如,这里是 4)和替换的长度号(这里也是 4),所以我可以只需修改这些数字,以防我想从另一个位置开始并进行不同长度的替换,因为实际上,我有一个包含数千个字母的字符串,我想替换数百个字符,因此模式替换在我的情况下不起作用

您想使用 awksed 吗?似乎您实际上想要以下之一:

$ echo ABCDABCDABCD | perl -pe 'substr($_,4,4)="NNNN"'
ABCDNNNNABCD
$ echo ABCDABCDABCD | perl -pe 'substr($_,4,4)="N"x4'
ABCDNNNNABCD
echo ABCDABCDABCD | awk '{[=10=]=gensub(/ABCD/,"NNNN",2)}1'
ABCDNNNNABCD
$ echo 'ABCDABCDABCD' |
    awk -v b=5 -v e=8 '{
        t=substr([=10=],b,e-b+1); gsub(/./,"N",t); print substr([=10=],1,b-1) t substr([=10=],e+1)
    }'
ABCDNNNNABCD