grep: regex tylko w celu dopasowania czegokolwiek między nawiasami


21

Jak dopasować słowo tylko między nawiasami

Wejście: this is (test.com)

Wyjście pożądania: test.com


1
Czy szukasz wyrażenia regularnego „grep”, czy np. Komendy zastępczej „sed” w celu wygenerowania wyświetlanego wyniku?
rickhg12hs

Odpowiedzi:


28

Oto kilka opcji, z których wszystkie drukują pożądany wydruk:

  1. Używanie grepz -oflagą (drukuj tylko pasującą część linii) i wyrażeniami regularnymi zgodnymi z Perlem ( -P), które mogą wyszukiwać :

    printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
    

    To wyrażenie regularne może wymagać wyjaśnienia:

    • (?<=\(): Jest to pozytywny wygląd , ponieważ ogólny format jest (?<=foo)bari będzie pasował do wszystkich przypadków barznalezionych zaraz po foo. W tym przypadku szukamy nawiasu otwierającego, więc używamy go, \(aby uciec.

    • (?=\)): To jest pozytywne spojrzenie w przyszłość i po prostu pasuje do zamykającego nawiasu.

  2. -oOpcja grepprzyczyn go tylko wydrukować dopasowaną część każdej linii, więc patrzymy na to, co jest w nawiasach, a następnie usunąć je z sed:

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. Parsuj wszystko za pomocą Perla:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. Analizuj całość za pomocą sed:

    printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
    

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.