Как получить все влево от последнего разделителя в строке? - PullRequest
0 голосов
/ 16 июля 2011

Чтобы вырезать последнее поле в строке, я использую:

command:         echo /dir1/dir2/dir3/file | awk -F "/" '{ print $NF; }'
output:          file

Как я могу получить все влево от последнего разделителя в той же строке?

desired output:  /dir1/dir2/dir3   

Спасибо за помощь

Rasty

Ответы [ 3 ]

3 голосов
/ 16 июля 2011

bash сам по себе достаточно силен, чтобы сделать это:

VAR="/dir1/dir2/dir3/file" echo ${VAR%/*}
2 голосов
/ 16 июля 2011

Если вы работаете с именами файлов конкретно, dirname и basename являются инструментами для работы:

pax$ dirname /dir1/dir2/dir3/file
/dir1/dir2/dir3

pax$ basename /dir1/dir2/dir3/file
file

Для произвольных разделителей вы можете использовать sed:

pax$ echo /dir1/dir2/dir3/file | sed 's?/[^/]*$??'
/dir1/dir2/dir3

pax$ echo /dir1/dir2/dir3/file | sed 's?^.*/??'
file

Первая заменяет последовательность «косая черта, за которой следует ноль или более не косых черт до конца строки» (/file), на ничто. Второй заменяет все от начала строки до последней косой черты (/dir1/dir2/dir3/) ничем.

Если вы хотите, чтобы вывод этих команд был назначен переменным, вы можете использовать $():

pax$ filespec=$(basename /dir1/dir2/dir3/file) ; echo $filespec
file
1 голос
/ 16 июля 2011

Полагаю, вы ищете команду dirname .

> dirname /dir1/dir2/dir3/file
/dir1/dir2/dir3    

Просто для полноты: basename .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...