有没有办法使用'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'
没有。我想做的是让输出只显示没有任何其他重复序列条目的resit。输出将只是唯一的序列号。
ata-ST500DM002-1BD142_S2AFE0JP
谢谢。
假设这些条目不包含换行符,则可以使用:
printf '%sn' /dev/disk/by-id/* |
awk '!/-part[0-9]*$/{arr[$0]; next} { sub(/-[^-]+$/, ""); delete arr[$0] }
END { for (i in arr) print i }'
ata-ST500DM002-1BD142_S2AFE0JP
将grep与正则表达式一起使用:ls|grep-Ev'part.*$'
$ ls test
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EEV65804 ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EEV65804-part9 ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2ET092491-part1
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EEV65804-part1 ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2ET092491 ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2ET092491-part9
$ ls test | grep -Ev 'part.*$'
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2EEV65804
ata-WDC_WD5000AAKX-60U6AA0_WD-WCC2ET092491