【发布时间】:2019-11-21 10:56:53
【问题描述】:
我有一个包含很长字符串的文件,我想用 Ns 替换它的子字符串。示例:
测试 ABCDABCDABCD
我想用awk命令和sed将它的一个子字符串替换为所有字母N,索引5到8的所有字符,所以字母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),所以我可以修改这些数字以防我想从另一个位置开始并进行不同长度的替换,因为实际上,我有一个包含数千个字母的字符串,我想替换数百个字符,因此在我的情况下替换模式不起作用
【问题讨论】:
-
提问技巧——当你说“这个命令似乎不起作用”时,你应该向 bot 提供预期输出和 实际 输出,或者描述什么失败时发生。只说“不起作用”是无意义的。
-
当然,谢谢你的提示,我修改了一下
-
您正在尝试混合 2 个独立的程序。 sed 和 awk 不能相互使用。只需使用 awk 并写
awk '{print substr($0,1,4) "NNNN" substr($0,9)}' -
hmm.. 我明白了,我不能使用“NNNN”,因为实际上我说我的替换是 10000 Ns,所以我必须输入 10000 次 N
标签: linux awk text-processing