analisar a saída de ls
não é confiável, mas isso deve funcionar neste caso específico:
sed -e 's/^.*emma emma //' file
Isso exclui tudo para "emma emma" em cada linha. se essa string não aparecer em uma linha, ela não será alterada.
Eu escrevi o regexp para remover somente o primeiro espaço após o emma, para que o campo de tamanho permaneça alinhado à direita (por exemplo, '709K' e '1007K', ambos usam a mesma quantidade de caracteres na linha)
se você não quiser, use isso:
sed -e 's/^.*emma emma *//' file
que apagará todos os espaços em branco após o emma até o início do próximo campo.
Aqui está uma versão sed que funciona com qualquer user group
:
sed -e 's/^.\{10\} [0-9]\+ [^ ]\+ [^ ]\+ //' file
ele depende ainda mais do formato exato da sua saída ls
, portanto, é tecnicamente ainda pior do que a primeira versão .... mas deve funcionar para o seu arquivo em particular.
veja Por que * not * ls '? para informações sobre por que a análise ls é ruim.
Se nem todos os arquivos forem de propriedade de emma
, convém usar um script awk como este.
awk 'NF>2 {print $5,$6,$7,$8,$9} ; NF<3 {print}' file
Para linhas com mais de 2 campos, imprime apenas os campos 5-9. para linhas com campos < 3, imprime a linha inteira.
infelizmente, isso perde o alinhamento à direita do campo de tamanho .... que pode ser corrigido com um script awk
um pouco mais complicado:
awk 'NF>2 {printf "%5s %s %s %s %s\n", $5, $6, $7, $8, $9} ; NF<3 {print}' file
Esta versão final mescla o loop for da resposta de jasonwryan, então lida com nomes de arquivos que possuem qualquer número de espaços simples neles (mas não espaços consecutivos, como mencionado por G-Man):
awk 'NF>2 {printf "%5s", $5; for(i=6;i<=NF;i++){printf " %s", $i}; printf "\n"} ; NF<3 {print}' file