2014-02-13 3 views
0

У меня есть список n файлов в папке, имеющих некоторый формат.В терминале UNIX Как получить часть имени файла в папке?

Например: ABCD.EXXXX.ZZZZ.ZZZZZ.txt

в указанном файл ABCD.E является общим для всех файлов, ZZZZ.ZZZZ струнного желания пользователя и мне нужно извлечь XXXX из всех файлов, необходимо отображать на дисплее пользователя XXXX. Есть ли способ сделать это? Помоги мне в этом .. Спасибо заранее ..

ответ

0
awk -F"."'{print $2}' filename 

Вы можете попробовать печати $1, $2, $3 ... чтобы получить более глубокое понимание команды.

1

Используйте ls -1, чтобы составить список соответствующих файлов. Проденьте его в седло, чтобы удалить начало «ABCD.E». Затем снова подключите его к sed, чтобы удалить все после первого «.».

ls -1 ABCD\.E*\.txt | sed 's/^ABCD\.E//' | sed 's/\..*//' 

В качестве альтернативы, если вы хотите немного больше контроля на выходе вы можете сделать второй бит с AWK

ls -1 ABCD\.E*\.txt | sed 's/^ABCD\.E//' | awk 'BEGIN{FS="."}{print "value =", $1, "user=", $2"."$3}' 
0

Вы можете использовать параметр подстановки # и % Баш/КШ для этого изнутри оболочка.

function get_filename_section { 
    typeset f=${1:?} 
    typeset r=${f#ABCD.E} 
    print ${r%.ZZZZ.ZZZZZ.txt} 
} 

Тестирование:

[[ $(get_filename_section ABCD.EXXXX.ZZZZ.ZZZZZ.txt) == XXXX ]] && 
    echo ok || echo no 
Смежные вопросы