我有以下问题。
我有一个带有序列的文件,我想找到一个特定的模式并将其替换为另一个模式,但仅限于特定的次数。
例如:
ABCDEFGHIJKLMN
ABCDEFGHIJKLMN
ABCDEFGHIJKLMN
ABCDEFGHIJKLMN
ABCDEFGHIJKLMN
ABCDEFGHIJKLMN
我只想找到“DEFGHI”并将其替换为“ABCDEF”3 次。
sed -i 's/DEFGHI/ABCDEF/g' /home/user/test.txt
我不想全局替换;相反,我只想更换 3 次。
最佳答案
这会将给定的模式替换三次,无论它们在行中的分布方式如何
perl -0777 -pe'$i += s/DEF/xxx/ while $i < 3' < data.txt > out.txt
它假设模式没有被线打破。它遍历字符串,每次都从头开始搜索。这带有下面解释的警告,效率低下但很简单。
如果替换本身在与周围的文本结合时重新创建了模式,那么这也将在下一次传递中被替换。这样的替换必须以特定方式包含模式本身的部分内容。不过,如果这是一个问题,请告诉我。
问题中没有指定可能重叠模式的处理。如果有任何此解决方案将替换第一个,因此在下一次传递中重叠的解决方案将消失。
关于linux - sed 仅查找并替换特定的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42443410/