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