Sempre que você vir um arquivo de texto com dados em colunas, pense em awk
. Isso é feito trivialmente em awk
:
$ awk '{print $NF}' file
E..Dh.@.@.%.....
...$.....0..1203
12.78606,.3,...0
.153,.-0.153,..9
.960
E..Dh.@.@.%.....
...$.....0..1203
12.83611,.3,..-0
.153,.-0.460,..9
.960
E..Dh.@.@.%.....
...$.....0..1203
12.88615,.3,..-0
.153,.-0.306,..9
.807
E..Dh.@.@.%.....
...$.....0(.1203
12.93615,.3,...0
.153,.-0.153,..9
.807
A variável especial NF
é o número de campos da linha atual. Portanto, $NF
é o último campo da linha. Este script awk
apenas passa por cada linha do arquivo e imprime o último campo.
Você pode fazer o mesmo em perl
, se preferir:
perl -lane 'print $F[$#F]' file
Ou mesmo com o GNU grep:
grep -oP '.+\s\s*\K[^\s]+' file1
Ou, se você realmente quiser uma abordagem sed
por algum motivo, use o GNU sed (ou qualquer outra versão que aceite expressões regulares estendidas) e:
sed -r 's/.* +([^ ]+) *$//' file
O comando acima procura a cadeia mais longa que termina com um ou mais espaços ( .* +
), depois a cadeia mais longa de não espaços ( [^ ]+
) e depois 0 ou mais espaços ( *
) e substitui a totalidade coisa com o padrão capturado (é isso que os parênteses fazem). Ainda assim, isso falhará se o arquivo tiver espaços em branco que não sejam de espaço, por exemplo. Awk é de longe a melhor ferramenta para isso.