Sed 是否从文本中删除一种类型的字符串?

Sed 是否从文本中删除一种类型的字符串?,sed,notepad++,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.

我有类似的行,我想删除第一个行,而不是像
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
查找内容:((?这可能适合您(GNU-sed):

说明:

  • :循环地名持有者
  • $!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 

我建议你去找Cygwin(如果你还没有)然后运行
sort-u
。这将对输入进行排序,然后删除任何重复的行。不过,这只在顺序不重要的情况下起作用。

这听起来像是awk的工作,而不是sed…仅使用
sed
,很难检测出随机顺序中的这些差异。在我看来,这类工具并不适用当然,既不是sed,也不是正则表达式。你可能想在bash脚本中写一个if语句来找到类似的语句。这是一个涉及逻辑而不是正则表达式的东西。不幸的是,不知道该写什么。你能帮我吗?我不使用Windows,所以不能告诉那个操作系统提供的工具来解决这个问题问题。更合适的工具可能是
awk
perl
python
ruby
或类似的工具。它们都比
sed
强大得多。你可以说
s/\n.*/
删除前一行,但如果类似的行是分散的?(不是一行接一行)。此正则表达式在Sed for Windows?+1上工作。对于所提供的示例,它是一个很好的解决方案,但对随机顺序的字符串不起作用(问题是这样的)。
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