假设我有一个这样的 jar 列表。
a_1.0.0.jar
b_1.0.0.jar
b_2.0.0.jar
c_1.0.0.jar
c_1.3.0.jar
c_3.2.0.jar
d_2.0.0.jar
e_3.0.0.jar
我想获取重复的 jar 列表。
像这样
b_1.0.0.jar
b_2.0.0.jar
c_1.0.0.jar
c_1.3.0.jar
c_3.2.0.jar
或者像这样
b
c
非常感谢您的帮助。
答案1
如果文件名都是这样构建的,您可以执行以下操作:
ls | sed 's/_.*//' | uniq --repeated
这将列出所有文件,删除下划线和其后的所有内容,然后uniq
仅打印重复的行。
答案2
要获得第二个输出:
<list.txt sort -u | cut -d _ -f 1 | uniq -d
步骤:
sort
排序,以便uniq
稍后完成其工作。使用-u
该工具会折叠相同的行,因此它们不会产生误报。(您的示例不包含重复项;这是一般预防措施)。cut
以此_
作为分隔符并打印第一个字段,因此只有a
、b
等保留下来。uniq -d
仅打印重复的行,每组一次。
笔记:
- 任何名称的额外内容
_
都会破坏上述逻辑。 - 您的示例已排序且没有重复项。如果实际数据是这样的,则您不需要
sort
。