用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),所以我可以只需修改这些数字,以防我想从另一个位置开始并进行不同长度的替换,因为实际上,我有一个包含数千个字母的字符串,我想替换数百个字符,因此模式替换在我的情况下不起作用
您想使用 awk
和 sed
吗?似乎您实际上想要以下之一:
$ 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
我有一个包含很长字符串的文件,我想用 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),所以我可以只需修改这些数字,以防我想从另一个位置开始并进行不同长度的替换,因为实际上,我有一个包含数千个字母的字符串,我想替换数百个字符,因此模式替换在我的情况下不起作用
您想使用 awk
和 sed
吗?似乎您实际上想要以下之一:
$ 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