提取与模式匹配的文件名,并删除重复项并存储在数组中

时间:2015-08-13 22:32:42

标签: regex linux bash shell unix

我想知道列出部分文件名的最简单方法,而不会在目录中出现任何重复。

示例:

目录包含以下文件:

Stack1_over_flow.txt
Stack2_exchange.txt
Meta_stack.txt
Stack1_over_flow.txt
Meta_stack.txt

现在我希望结果为:

Stack1
Stack2
Meta

这里,提取在第一次出现“_”之前出现的字符串,并删除字符串是否有重复。

3 个答案:

答案 0 :(得分:2)

ls -1 | awk '{split($0,a,"_"); print a[1]}' | sort -b | uniq

仅包含find的文件:

find . -maxdepth 1 -type f -printf "%f\n" | awk '{split($0,a,"_"); print a[1]}' | sort -b | uniq

答案 1 :(得分:1)

使用

ls -l | sed -r 's/([a-zA-Z0-9])_.*/\1/' | uniq

答案 2 :(得分:1)

你甚至可以试试这个

ls -1 | cut -d "_" -f1 | uniq