2

我有类似的行,我想删除第一个...行,而不是唯一的行 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 上使用sednotepad++

我尝试使用这个正则表达式:

Find what:         ((?<=\n)|^)([^\n]{40})([^\n]*\n)(.*\n)?\2[^\n]*($|\n)
Replace with:      \2\3\4

它可以工作,但前提是这些行在另一行之下,但我也会有一个正则表达式,我以随机顺序检测这种类型的字符串。有可能吗?

4

2 回答 2

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如果最后一个替换为真 gotoa
  • 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 
于 2012-07-09T19:42:44.103 回答
2

我建议获取 Cygwin(如果您还没有)然后运行sort -u​​. 这将对输入进行排序,然后删除任何重复的行。不过,这仅适用于顺序不重要的情况。

于 2012-07-10T07:23:27.120 回答