我在删除文件中的重复行时遇到问题,并将其替换为非重复行。理想情况下,我只想用连续序列替换它,以便可以分离重复的行。
我正在考虑使用某种通配符(*):
sed -e "s/text_pattern/text_pattern*/g" my_file.txt
每次返回时,都会在text_pattern中添加一个新数字。但是,我无法在手册页和互联网上找到合适的解决方案。有没有人知道如何做这样的事情?也许sed不是最佳选择?
谢谢!
答案 0 :(得分:0)
Awk
似乎更适合此任务。我将假设您并不真正需要正则表达式,但希望将整行与固定字符串匹配。然后你可以这样做:
awk -v ln="text_pattern" '$0 == ln { $0 = $0 " " ++i };1' my_file.txt
答案 1 :(得分:0)
我不相信sed是这个的工具。如果你需要这些任务的正则表达式,你可以使用perl(它建立在awk 和 sed上)。
cat test | perl -e '$i = 1; while (<>) { chomp($_); if (s/pattern/pattern$i/) { $i++ }; print $_."\n"; }'
也就是说,对于stdin中的每一行:删除换行符,然后将计数器附加到pattern,如果找到它。并且,如果找到它,请将其增加1.然后打印该行。
编辑:测试是您的输入文件。
答案 2 :(得分:0)
<强> uniq的强>
uniq -c input.txt
显示发生的频率。uniq -u input.txt
打印唯一的行。<强> AWK 强>
awk 'x[$0]++' input.txt
打印重复的行。awk '!x[$0]++' input.txt
删除重复的行。<强> SED 强>
sed '$!N; /^\(.*\)\n\1$/P; D' input.txt
打印重复的行。sed '$!N; /^\(.*\)\n\1$/!P; D' input.txt
删除重复的行。