linux - 使用 sed 命令打印重复行?

标签 linux unix sed

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

hi
hello
hi
how
hello

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

示例:输出应该是:

hi
hello

最佳答案

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

使用 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)移除管道。

关于linux - 使用 sed 命令打印重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28770389/

相关文章:

unix - 如何重定向到标准输出?

linux - 在终端中使用 AWK 在 CSV 中添加列标题

linux - 如何执行进程,在缺少基于文件系统的功能的情况下保留功能?

linux - 移动存储库。我是否同时使用 SVN 开关、SVN 重定位或其他东西

linux - #include 在 Expect 脚本中

linux - 尝试在具有多个站点的服务器上编辑 crontab

linux - 在重音符内执行时 sed 奇怪的行为 - `

regex - 使用 sed 匹配模式并从该行删除到文件末尾

regex - sed 匹配日期格式 2013 年 4 月 25 日

linux - 如何在linux bash shell中定义$i?