Come posso abbinare la parola solo tra parentesi
Input:
this is (test.com)
Uscita del desiderio:
test.com
Come posso abbinare la parola solo tra parentesi
Input:
this is (test.com)
Uscita del desiderio:
test.com
Risposte:
Ecco alcune opzioni, che stampano tutte l'output desiderato:
Usando grep
con la -o
bandiera (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)bar
e che corrisponderà a tutti i casi di bar
trovati 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.
L' -o
opzione per grep
indurlo 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'
Analizza il tutto con Perl:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
Analizza il tutto con sed
:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
Un approccio sarebbe quello di utilizzare le espressioni regolari compatibili con PCRE - Perl con grep
:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com