grep: regex solo per abbinare qualcosa tra parentesi


21

Come posso abbinare la parola solo tra parentesi

Input: this is (test.com)

Uscita del desiderio: test.com


1
Stai cercando un regex 'grep' da abbinare, o, ad esempio, un comando sostitutivo 'sed' per generare il tuo output mostrato?
rickhg12hs,

Risposte:


28

Ecco alcune opzioni, che stampano tutte l'output desiderato:

  1. Usando grepcon la -obandiera (stampa solo la parte corrispondente della linea) e le espressioni regolari compatibili Perl ( -P) che possono fare delle ricerche :

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

    Quella regex potrebbe aver bisogno di qualche spiegazione:

    • (?<=\(): Questo è un aspetto positivo , il formato generale è (?<=foo)bare che corrisponderà a tutti i casi di bartrovati subito dopo foo. In questo caso, stiamo cercando una parentesi aperta, quindi usiamo \(per sfuggire.

    • (?=\)): Questo è uno sguardo positivo e corrisponde semplicemente alla parentesi di chiusura.

  2. L' -oopzione per grepindurlo a stampare solo la parte corrispondente di qualsiasi riga, quindi cerchiamo qualsiasi cosa sia tra parentesi e quindi eliminiamo con sed:

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. Analizza il tutto con Perl:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. Analizza il tutto con sed:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.