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