【发布时间】:2021-02-02 12:47:51
【问题描述】:
有没有办法使用“ls”命令,然后通过管道输出只显示唯一的项目?
示例如下:
ls /dev/disk/by-id
ata-ST500DM002-1BD142_S2AFE0JP
ata-ST500DM002-1BD142_W2AEDMQK
ata-ST500DM002-1BD142_W2AEDMQK-part1
ata-ST500DM002-1BD142_W2AEDMQK-part2
ata-ST500DM002-1BD142_W2AEDMQK-part3
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EEV65804
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EEV65804-part1
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EEV65804-part9
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EKK60289
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EKK60289-part1
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EKK60289-part9
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2ET092491
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2ET092491-part1
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2ET092491-part9
ata-WDC_WD5003AZEX-00MK2A0_WD-WCC3F2HAD1XC
ata-WDC_WD5003AZEX-00MK2A0_WD-WCC3F2HAD1XC-part1
ata-WDC_WD5003AZEX-00MK2A0_WD-WCC3F2HAD1XC-part9
正如您在输出中看到的,除了其中一个项目外,所有项目都有序列号和 -part#,但序列号位于顶部:
'ata-ST500DM002-1BD142_S2AFE0JP'
没有。我想要做的是让输出只显示没有任何其他重复序列条目的重新测试。输出将只是唯一的序列号。
ata-ST500DM002-1BD142_S2AFE0JP
谢谢。
【问题讨论】:
-
预期输出,请包括您的尝试
-
我添加了预期的输出
-
这能回答你的问题吗? How to print only the unique lines in BASH?
-
顺便说一句:为什么这与您的参数不匹配? ata-ST500DM002-1BD142_W2AEDMQK
-
您可以使用像
files=( /dev/disk/by-id/* )这样的glob 来收集数组中的名称。您可以使用参数扩展来修改数组的内容,例如serials=( "${files[@]#ata-}" ) serials=( "${files[@]%-part*}" )。您可以使用printf '%s\n' "${serials[@]}"输出这样的数组。您可以使用sort -u使列表独一无二。
标签: bash awk sed terminal grep