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

sha*_*ron 1 unix linux sed

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

hi
hello
hi
how
hello
Run Code Online (Sandbox Code Playgroud)

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

示例:输出应为:

hi
hello
Run Code Online (Sandbox Code Playgroud)

jay*_*ngh 5

不确定为什么必须在sed可以使用uniq二进制文件时使用它。任何人,文件需要排序,所以我们必须先这样做。

使用uniq和我的首选方式:

$ sort file | uniq -d
hello
hi
Run Code Online (Sandbox Code Playgroud)

使用GNU sed

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

如果您愿意,您可以使用进程替换<(sort file)来移除管道。