我有一个html链接列表,其中大部分都是重复的,如下例所示 - >
> http://example.com/some/a-test-link.html
> http://example.com/some/a-test-link.html
> http://example.com/some/another-link.html
> http://example.com/some/another-link.html
> http://example.com/some/again-link.html
> http://example.com/some/again-link.html
我不需要两次相同的链接,因此我需要删除重复内容并且只保留一个链接。我怎么能用正则表达式做到这一点?或SED / AWK(我不确定哪种技术最好。)?我正在使用ubuntu操作系统和文本编辑sublime文本3。
由于
答案 0 :(得分:4)
使用awk
非常简单:
awk '!seen[$0]++' file
基本上意味着:
awk "!($0 in seen) {seen[$0];print}"
因此,如果该行不在数组中,它将添加到它并打印它。将跳过所有后续行(如果它们存在于数组中)。
$ cat file
> http://example.com/some/a-test-link.html
> http://example.com/some/a-test-link.html
> http://example.com/some/another-link.html
> http://example.com/some/another-link.html
> http://example.com/some/again-link.html
> http://example.com/some/again-link.html
$ awk '!seen[$0]++' file
> http://example.com/some/a-test-link.html
> http://example.com/some/another-link.html
> http://example.com/some/again-link.html
答案 1 :(得分:3)
$ sort -u file
> http://example.com/some/again-link.html
> http://example.com/some/another-link.html
> http://example.com/some/a-test-link.html
答案 2 :(得分:2)
不确定这是否适合您,但是,如果链接符合您发布的顺序,则以下正则表达式将为您提供独特的结果。
/(http:\/\/.*?)\s+(?:\1)/gm
答案 3 :(得分:2)
这可能适合你(GNU sed):
sed -r 'G;/(http[^\n]*)\n.*\1/d;s/\n.*//;H' file
使用保留空间保存以前看到过的URL并删除包含重复项的行。
答案 4 :(得分:2)
您还可以使用sort和uniq的组合:
sort input.txt | uniq
对重复链接进行排序分组,并且uniq删除所有连续重复的链接。