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)
优衣库应该够了:
$ 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 行 - 删除两个重复条目)。
另外一个选择:
grep -zPo '\n(.+)\n\1\n'
Run Code Online (Sandbox Code Playgroud)
这样我们可以添加额外的调整(例如接受额外的空格等)
升级:正如@thor 指出的那样,这并没有捕获文件开头的重复内容。为了解决这种情况,请使用
grep -zPo '(?<!.)(.+\n)\1'
Run Code Online (Sandbox Code Playgroud)