Sed oneliner для получения имени файла и содержащего его каталога

Sed oneliner для получения имени файла и содержащего его каталога

Мне нужно извлечь имя файла и содержащий его каталог из полного пути (синтаксис DOS). Мне нужно сделать это с помощью sed, так как это часть большего регулярного выражения.

Пример ввода: ..\home\test\somedir\anotherdir\myfile.txt

Ожидаемый вывод: anotherdir\myfile.txt

Любая помощь будет высоко оценена.

Спасибо

решение1

Просто делайте это методично. Вы хотите разделить строку на три части: произвольный префикс .*, а затем дважды обратную косую черту, за которой следуют символы, не являющиеся обратной косой чертой \\[^\\]*. Захватите то, что находится после предпоследней обратной косой черты, и отбросьте остальное.

printf %s "$dos_path" | sed 's/^.*\\\([^\\]*\\[^\\]*\)$/\1/'

(Будьте осторожны, echoтак как некоторые оболочки расширяют обратные косые черты.)

решение2

Есть ли особая причина не использовать awk?

echo $DIR | awk -F'\' '{ print $(NF-1) "\\" $NF }'

Связанный контент