Localizando o último item em uma linha usando grep


12

Estou tentando usar a última palavra ou frase usando grep para um padrão específico. Neste exemplo, seria da última vírgula até o final da linha:

Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value

E, portanto, a saída desejada para essa linha seria "Grande valor". Todas as linhas também têm comprimentos diferentes, mas sempre possuem uma vírgula anterior às últimas palavras.

Basicamente, eu gostaria de simplesmente enviar da última vírgula até o final da linha. Obrigado!


9
Você já pensou em usar awk -F, '{print $NF}'?
steeldriver

Obter o último item na linha é tarefa fácil, mas como essa linha deve ser identificada? quero dizer, como um comando ou script pode olhar para a linha e dizer "sim, esse é o único"? qual é o padrão que identifica essa linha?
Sergiy Kolodyazhnyy

5
grepnão é a ferramenta para este trabalho.
Kusalananda

Respostas:


27

Aqui:

grep -o '[^,]\+$'
  • [^,]\+corresponde a um ou mais caracteres que não estão ,no final da linha ( $)

  • -o imprime apenas a parte correspondente

Exemplo:

% grep -o '[^,]\+$' <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value

Trabalhou como um encanto! Eu estava tentando usar uma combinação de "." e outras expressões anteriores, mas isso funciona muito melhor, muito apreciado.
Reversebottle

hmm, eu teria usado -Eoe, em seguida, não é necessário para escapar do+
Baldrickk

O @Baldrickk -Ehabilita o ERE, é por isso.
precisa saber é

@ heemayl sim, eu sei o porquê. I tendem a usá-lo como ele é uma sintaxe regex mais comum
Baldrickk

14

Sempre gosto de ver uma awksolução, então aqui está (votou a solução adequada!):

% awk -F, '{print $NF}'  <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value

3
Essa deve ser a resposta correta. Enquanto você pode usar grep, você também pode apertar um parafuso com um martelo.
precisa saber é
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.