Извлечь имя файла из файла, используя скрипт

У меня есть текстовый файл, который имеет следующую строку:

/u/tux/abc/spool/frtbla_mcdetc_0000149099_20101126135009990_1.tif

Я хочу извлечь frtbla_mcdetc_0000149099_20101126135009990_1.tif; слово после последней косой черты (/).

5 ответов

Решение

Если вы находитесь в Linux-подобной среде, вы можете использовать basename полезность:

basename $(<your_file)

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

$ cut -f6 -d '/' file.txt

Здесь используется cut для обработки разделителей каталогов как разделителя и извлечения шестого.

Если вместо этого все, что вы знаете, это последняя часть строки, но не знаете структуру каталогов, вы можете использовать rev также:

$ rev file.txt | cut -f1 -d '/' | rev

Здесь файл переворачивается, и первое поле извлекается перед повторным обращением.

Я не знаю, что такое стандартная оболочка в Aix, но bash доступно и поддерживает редактируемое расширение переменных.

Если ваше полное имя находится в переменной FileName, затем ${FileName##*/} отображает имя с удалением всех ведущих символов до последнего /; в отличие от ${FileName#*/} удаляет до первого /, в то время как ${FileName%/*} удаляет завершающие символы из последнего / (т.е. путь к каталогу).

Если вы генерируете имена файлов с помощью find команда, тогда вам нужна команда, как:

find ... | while read FileName; do echo ${FileName##*/}; done

Если в текстовом файле:

while read FileName; do echo ${FileName##*/}; done < FileList.txt

Заменить echo Команда любой обработки вам нужно сделать с именем.

Используйте эту команду

cat text_file_name | cut -d '/' -f 6

Следующее применимо ко всем строкам в оболочке, а не только к именам файлов, и это гораздо проще, чем вырезать, потому что вам не нужно знать, сколько есть полей перед тем, которое вы хотите:

$ foo=/path/to/file/split/by/slashes.txt
$ echo ${foo##*/}
slashes.txt

При этом используется "жадная обрезка", то есть обрезка всего до последнего "/", как описано здесь:

https://stackoverflow.com/questions/3162385/how-to-split-a-string-in-shell-and-get-the-last-field

${foo  <-- from variable foo
  ##   <-- greedy front trim
  *    <-- matches anything
  /    <-- until the last '/'
 }
Другие вопросы по тегам