Мне нужно извлечь имя файла и содержащий его каталог из полного пути (синтаксис 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 }'