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