Sua ideia é inteligente , mas precisa de algumas correções. Veja como você provavelmente quis dizer isso:
awk -F'[^/]*/[^/]*$' '{print $1}' deep.list
Explicação:
Em primeiro lugar, você provavelmente escreveu incorretamente .*
as *.
.
Então, o modificador *
é ganancioso , portanto, você precisa tomar cuidado para não corresponder a mais do que pretendia! A solução é simples, embora um pouco menos legível: use [^/]*
em vez de .*
. Dessa forma, você combina todos os caracteres, exceto /
.
Por fim, $0
representa a linha inteira, que não foi alterada nem um pouco, especificando um separador de campo personalizado especialmente criado. Nesse caso, você deseja imprimir o primeiro campo: $1
.
Aqui está uma abordagem diferente das duas respostas ligadas por @ ender.qa :
awk '{gsub("[^/]+/[^/]+$","");print}' deep.list
E um empregando um loop:
awk -F/ '{for(i=1;i<=NF-2;i++){printf "%s/",$i}; print ""}' deep.list
O método de substituição é mais facilmente implementado em Perl:
perl -lape 's"[^/]+/[^/]+$""' deep.list
ou sed:
sed -E 's"[^/]+/[^/]+$""' deep.list