У меня есть текстовый файл, который имеет следующую строку:
/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 любой обработкой, которую вам нужно сделать с именем.