Eu tenho uma string separada por espaço que é produzida por um comando, que eu gosto de canalizar cut
, usando -fd ' '
para dividir em espaços. Sei que posso usar -f <n>
para exibir o número do campo <n>
, mas posso exibir o último campo se não souber o comprimento da string?
Ou preciso usar uma ferramenta de edição de texto mais flexível como sed
ou awk
?
command-line
cut-command
Arronical
fonte
fonte
-n
torna o n desde o início,n-
é de n até o fim e existe a--complement
opção que inverte a seleção. Mas não há como contar o número de campos e agir de acordo com o que sei.Respostas:
Não,
cut
não posso fazer isso. Você pode usar doisrev
comandos, comomas geralmente é mais fácil de usar
awk
:fonte
Você pode fazer isso usando apenas shell, nenhuma ferramenta externa é necessária, usando a Expansão de parâmetros:
var##*
descartará tudo, desde o início até o último espaço do parâmetro (variável)var
.Se o delimitador puder ter algum espaço em branco, como espaço ou tabulação, use a classe de caractere
[:blank:]
:Exemplo:
fonte
Pessoalmente, gosto da resposta de Florian Diesch. Mas existe esse caminho também.
Explicação:
wc -w
dá o número de palavras. ecut
corta a última palavraEDITAR:
Imaginei outra maneira de fazê-lo:
fonte
a="my string here"
também possa usar a expansão de parâmetros${a##* }
.Aqui está um usando
grep
Como funciona:
-o
Imprime apenas as partes correspondentes (não vazias) de uma linha correspondente.[^ ]*$
corresponde a qualquer coisa, desde o final até encontrar um espaço.Outro liner de glenn jackman usando perl
fonte