2015-04-07 2 views
0

Я хочу извлечь определенную часть из имен файлов для работы с ними. Пример:Grep Имена файлов из ls для определенной их части

ls -1 

REZ-Name1,Surname1-02-04-2012.png 
REZ-Name2,Surname2-07-08-2013.png 
.... 

Так что я хочу, чтобы получить только часть с именем. Как это можно достичь?

+0

Вы хотите использовать 'grep' и' ls', хотя они не являются подходящими инструментами для работы? –

+0

@thatotherguy Итак, скажите мне лучшие инструменты, чем sir. – Nroh

ответ

0

Существует несколько способов сделать это. Вот петля:

for file in REZ-*-??-??-????.png 
do 
    name=${file#*-} 
    name=${name%-??-??-????.png} 
    echo "($name)" 
done 

Учитывая разнообразие имен файлов со всевозможными крайними случаями из расстояния, дополнительный дефиса и линии каналы:

REZ-Anna-Maria,de-la-Cruz-12-32-2015.png 
REZ-Bjørn,Dæhlie-01-01-2015.png 
REZ-First,Last-12-32-2015.png 
REZ-John Quincy,Adams-11-12-2014.png 
REZ-Ridiculous example       # this is one filename 
is ridiculous,but fun-22-11-2000.png    # spanning two lines 

выводит:

(Anna-Maria,de-la-Cruz) 
(Bjørn,Dæhlie) 
(First,Last) 
(John Quincy,Adams) 
(Ridiculous example 
is ridiculous,but fun) 

Если вы менее подвержены правильности, вы можете упростить его дальнейшее:

$ ls | grep -o '[^-]*,[^-]*' 
Maria,de 
Bjørn,Dæhlie 
First,Last 
John Quincy,Adams 
is ridiculous,but fun 
+0

Это было бы решением, но я ищу способ сделать это с помощью некоторых простых команд, возможно, с помощью такой трубы: 'grep ...... | ls -1' – Nroh

+0

@Nroh Хорошо, как это –

+0

То, что я искал, спасибо, очень сильно сэр – Nroh

0

В этом случае, вырезать имеет больше смысла, чем Grep:

ls -l | cut -f2 -d- 

разрез второго поля от входа, используя «-» в качестве разделителя полей. Ответ другого парня правильно справится с некоторыми случаями, которые мои не будут делать, но для одного использования я обычно считаю, что семантика разреза намного легче запомнить.

Смежные вопросы