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

时间:2019-07-11 16:51:57

标签: linux awk text-processing

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

测试     ABCDABCDABCD

我想用awk命令并用sed替换所有字母N的子字符串,并将所有从索引5到8的字符sed替换,因此字母N的总长度为4。

输出

ABCDNNNNABCD

我尝试过这样的事情:

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

但是,此命令似乎提供了以下输出:

ABCDABCDABC

没有替代

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

3 个答案:

答案 0 :(得分:1)

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

$ echo ABCDABCDABCD | perl -pe 'substr($_,4,4)="NNNN"'
ABCDNNNNABCD
$ echo ABCDABCDABCD | perl -pe 'substr($_,4,4)="N"x4'
ABCDNNNNABCD

答案 1 :(得分:0)

echo ABCDABCDABCD | awk '{$0=gensub(/ABCD/,"NNNN",2)}1'
ABCDNNNNABCD

答案 2 :(得分:0)

$ echo 'ABCDABCDABCD' |
    awk -v b=5 -v e=8 '{
        t=substr($0,b,e-b+1); gsub(/./,"N",t); print substr($0,1,b-1) t substr($0,e+1)
    }'
ABCDNNNNABCD