Znajdowanie ostatniego elementu w wierszu za pomocą grep

13

Próbuję wziąć ostatnie słowo lub frazę za pomocą grep dla określonego wzorca. W tym przykładzie będzie to od ostatniego przecinka do końca wiersza:

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

Zatem pożądanym wynikiem dla tego wiersza byłaby „Wielka wartość”. Wszystkie wiersze mają również różne długości, ale zawsze mają pojedynczy przecinek poprzedzający ostatnie słowa.

Zasadniczo chciałbym po prostu wyprowadzić od ostatniego przecinka do końca wiersza. Dziękuję Ci!

wsteczny
źródło
9
Czy zastanawiałeś się nad użyciem awk -F, '{print $NF}'?
steeldriver
Dostanie ostatniego elementu do linii jest łatwym zadaniem, ale jak rozpoznać tę linię? mam na myśli, jak polecenie lub skrypt może spojrzeć na linię i powiedzieć „tak, to jest to”? jaki jest wzór identyfikujący tę linię?
Sergiy Kolodyazhnyy
5
grepnie jest narzędziem do tego zadania.
Kusalananda

Odpowiedzi:

27

Tutaj:

grep -o '[^,]\+$'
  • [^,]\+dopasowuje jeden lub więcej znaków, które nie znajdują się ,na końcu wiersza ( $)

  • -o drukuje tylko dopasowaną część

Przykład:

% grep -o '[^,]\+$' <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value
heemayl
źródło
Działa jak urok! Próbowałem użyć kombinacji „”. i inne wyrażenia wcześniej, ale działa to o wiele lepiej, bardzo doceniane.
reversebottle
hmm, użyłbym, -Eoa potem nie musiałem uciec+
Baldrickk
@Baldrickk -Ewłącza ERE, dlatego.
heemayl
@ heemayl tak, wiem dlaczego. Zwykle używam go, ponieważ jest to bardziej powszechna składnia
wyrażeń
15

Zawsze lubię widzieć awkrozwiązanie, więc oto jest (głosowałem na właściwe rozwiązanie!):

% awk -F, '{print $NF}'  <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value
Paul Evans
źródło
3
To powinna być poprawna odpowiedź. Podczas gdy możesz używać grep, możesz także wkręcić śrubę młotkiem.
wilsotc