从文本中删除一种字符串?

时间:2012-07-09 18:05:49

标签: sed notepad++

我有类似的行,我想删除第一行 ... 行,不是 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

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

2 个答案:

答案 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。这将对输入进行排序,然后删除任何重复的行。但这只适用于订单不重要的情况。