2015-08-13 2 views
0

Я хотел бы знать самый простой способ перечислить часть имен файлов без какого-либо дублирования, присутствующих в каталоге.Извлечь имена файлов, которые соответствуют шаблону, и удалить дубликаты и сохранить в массиве

Пример:

Каталог содержит файлы, как это:

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

Теперь я хочу, чтобы результат:

Stack1 
Stack2 
Meta 

Здесь извлечь строку, которая происходит перед первым вхождением «_» и удалите, если произойдет дублирование строки.

ответ

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

только файлы, с находкой:

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

Спасибо. Я ожидал одну команду линии с минимальными вызовами bash. Оно работает ! – Langdon

+0

Прохладный, добро пожаловать! –

+0

Должен работать. Я бы рекомендовал использовать сортировку перед uniq, чтобы убедиться, что результаты действительно уникальны. В противном случае это не гарантировалось бы, если бы вы выбрали нечто, отличное от префикса. – Navneet

1

Использование

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

Команда вместо отображения строки перед первым вхождением «_» отображает полное имя файла. – Langdon

+0

@ Langdon попробуйте сейчас – David

+0

works :) Но он отображает каталоги, даже если имя каталога не имеет «_». Можно ли отображать только файлы? – Langdon

1

вы даже можете попробовать этот

ls -1 | cut -d "_" -f1 | uniq 
Смежные вопросы