У мене є текстовий файл із таким рядком:
/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
; слово після останньої косої риски ( /
).
Відповіді:
використовувати цю команду
cat text_file_name | cut -d '/' -f 6
cat
файл файлу підпадає під те, що відомо - дещо судження - як " марне використанняcat
"; якщо ви не переглядаєте файл чи подібний (хоча там ви знову можете скористатися less
)
Якщо ви знаєте точний формат структури каталогів, і він не зміниться, ви можете використовувати cut
:
$ cut -f6 -d '/' file.txt
Тут використовується нарізка для розгляду розділювачів каталогів як роздільника і витягування 6-го.
Якщо замість цього все, що ви знаєте, це остання частина рядка, але не знаєте структури каталогу , ви також можете використовувати 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
команду будь-якою обробкою, яку вам потрібно зробити з іменем.