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

Rahul Patil
źródło
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/'
    
terdon
źródło