У меня есть текстовый файл, который имеет следующую строку:
/u/tux/abc/spool/frtbla_mcdetc_0000149099_20101126135009990_1.tif
Я хочу извлечь frtbla_mcdetc_0000149099_20101126135009990_1.tif
; слово после последней косой черты (/
).
У меня есть текстовый файл, который имеет следующую строку:
/u/tux/abc/spool/frtbla_mcdetc_0000149099_20101126135009990_1.tif
Я хочу извлечь frtbla_mcdetc_0000149099_20101126135009990_1.tif
; слово после последней косой черты (/
).
Если вы находитесь в Linux-подобной среде, вы можете использовать утилиту basename
:
basename $(<your_file)
используйте эту команду
cat text_file_name | cut -d '/' -f 6
Если вы знаете точный формат структуры каталогов и она не изменится, вы можете использовать команду cut
:
$ cut -f6 -d '/' file.txt
Здесь используется cut для обработки разделителей каталогов как разделителя и извлечения шестого.
Если вместо этого вам известно только то, что это последняя часть строки, но вы не знаете структуру каталогов, вы также можете использовать rev
:
$ rev file.txt | cut -f1 -d '/' | rev
Здесь файл переворачивается, и первое поле извлекается перед повторным обращением.
Следующее применимо ко всем строкам в оболочке, а не только к именам файлов, и это гораздо проще, чем вырезать, потому что вам не нужно знать, сколько есть полей перед тем, которое вы хотите:
$ 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 '/'
}
Я не знаю, что такое стандартная оболочка в 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
любой обработкой, которую вам нужно сделать с именем.