Sed oneliner para obter o nome do arquivo e o diretório que contém

Sed oneliner para obter o nome do arquivo e o diretório que contém

Preciso extrair o nome do arquivo e o diretório que contém de um caminho completo (sintaxe DOS). Preciso fazer isso usando sed, pois faz parte de uma expressão regular maior.

Entrada de exemplo: ..\home\test\somedir\anotherdir\myfile.txt

Saída esperada: anotherdir\myfile.txt

Qualquer ajuda seria muito apreciada.

Obrigado

Responder1

Basta fazer isso metodicamente. Você deseja dividir uma linha em três partes: um prefixo arbitrário .*e, em seguida, duas vezes uma barra invertida seguida por caracteres sem barra invertida \\[^\\]*. Capture o que vem depois da penúltima barra invertida e elimine o resto.

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

(Cuidado, echopois alguns shells expandem barras invertidas.)

Responder2

Existe um motivo específico para não usar o awk?

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

informação relacionada