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!


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

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

3
To powinna być poprawna odpowiedź. Podczas gdy możesz używać grep, możesz także wkręcić śrubę młotkiem.
wilsotc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.