使用sed命令打印重复的行?

时间:2015-02-27 17:01:00

标签: linux unix sed

我正在尝试使用sed命令在文件中打印重复的行。 在文件中,我有以下内容:

hi
hello
hi
how
hello

如何使用sed命令打印此文件中的重复行?

示例:输出应为:

hi
hello

2 个答案:

答案 0 :(得分:4)

当您可以使用sed二进制文件时,不确定为什么必须在uniq。 Anywho,文件需要排序,所以我们必须先做。

使用uniq和我的首选方式:

$ sort file | uniq -d
hello
hi

使用GNU sed

$ sort file | sed '$!N; s/^\(.*\)\n\1$/\1/; t; D'
hello
hi
  • 我们使用N命令从输入中读取下一行,该命令将下一行追加到由“\ n”字符分隔的模式空间。
  • $!阻止它在最后一行上执行。
  • 替换将两个重复的字符串替换为一个。
  • t命令将脚本带到自动打印当前模式空间的末尾。
  • 如果替换不成功,则执行D,删除不重复的字符串。
  • 循环继续,这样只有重复的行打印一次。

如果您愿意,可以通过<(sort file)删除管道来使用流程替换。

答案 1 :(得分:0)

尝试类似:

sort file.txt | uniq -d

对文件进行排序,然后打印重复的行。如果你想忽略这种情况,那么在uniq命令中使用-i选项。