我有类似的行,我想删除第一行 ... 行,不是 http://www.filefactory.com/file/a181d18/n/...nimal_2010_.rar
这样的唯一行。
我考虑类似行,直到第二个到达...
我想要删除第二个类似行。我该怎么办?
http://rapidshare.com/files/152133956/2005_-_Candlemass.part1.rar (not delete)
http://rapidshare.com/files/152133956/2005...emass.part1.rar --> similar (delete)
http://www.filefactory.com/file/a181d18/n/...nimal_2010_.rar -->unique (not delete)
http://www.shragle.com/files/9baa908b/Bvdub-The_First_Day-%2528HN031%2529-2012.rar(not delete)
http://www.shragle.com/files/9baa908b/Bvdu...1%2529-2012.rar --> similar (delete)
我在Windows上使用 sed 和 notepad ++
我尝试使用这个正则表达式:
Find what: ((?<=\n)|^)([^\n]{40})([^\n]*\n)(.*\n)?\2[^\n]*($|\n)
Replace with: \2\3\4
它可以工作,但只有当行是一个在另一个之下,但我也有一个正则表达式,我以随机顺序检测到这种类型的字符串。有可能吗?
答案 0 :(得分:3)
这可能适合你(GNU sed):
sed ':a;$!N;/^\([^\n]*\)[^\n]*\n\1\.\.\./s/\n.*//;ta;P;D' file
说明:
:a
循环地名持有人$!N
追加换行符,然后在当前行的下一行追加,除非是最后一行。/^\([^\n]*\)[^\n]*\n\1\.\.\./
寻找接近重复的行。s/\n.*//
删除上一行。ta
如果最后一次替换为真,请转到a
P
在模式空间中打印第一行。D
删除模式空间中的第一行(除非为空,否则不要获取下一行)要匹配随机排列的字符串,请转到awk。
awk '/\.\.\./{o=$0;sub(/\.\.\..*/,"");a[o]=$0;next}{b[$0]}END{for(x in a){for(y in b){if(y ~ a[x]){delete a[x]}}}for(x in a)print x;for(x in b)print x}' file
答案 1 :(得分:2)
我建议让Cygwin(如果你还没有)然后运行sort -u
。这将对输入进行排序,然后删除任何重复的行。但这只适用于订单不重要的情况。