找到两个连续的重复行

yae*_*ael 8 sed awk perl text-processing

如何在文件中找到两个连接的重复行

例如在这个文件中,我们只有两个串联的重复行

 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.ear
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter <--
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter <--
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.xml
Run Code Online (Sandbox Code Playgroud)

Geo*_*iou 8

优衣库应该够了:

$ cat c.txt
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.ear
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.xml

$ uniq -D c.txt
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter

$ uniq c.txt
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.ear
 OQ-63/ECC/Global/MES/CZ/adWerum-CZ-Adapter
 OQ-63/ECC/Global/MES/54/ECC-MRP-S05.xml
Run Code Online (Sandbox Code Playgroud)

默认情况下 uniq 检查输入文件的相邻行。因此,对于未排序的文件(如您的情况), uniq 将完成您想要的工作。

您可能还对 uniq -d 和 -u 选项感兴趣。有关更多详细信息,请参阅手册页(-d 仅打印两个重复行之一,-u 仅打印 uniq 行 - 删除两个重复条目)。


JJo*_*oao 5

另外一个选择:

grep -zPo '\n(.+)\n\1\n'
Run Code Online (Sandbox Code Playgroud)

这样我们可以添加额外的调整(例如接受额外的空格等)

升级:正如@thor 指出的那样,这并没有捕获文件开头的重复内容。为了解决这种情况,请使用

grep -zPo '(?<!.)(.+\n)\1' 
Run Code Online (Sandbox Code Playgroud)

  • 有趣的解决方案,但当重复行位于文件开头时它不起作用。 (2认同)
  • @Thor,你写的,谢谢。我们可以写 `grep -zPo '(?&lt;!.)(.+\n)\1' ` 但变得有点神秘...... (2认同)