Comment faire correspondre le mot uniquement entre parenthèses
Contribution :
this is (test.com)
Sortie désirée:
test.com
Comment faire correspondre le mot uniquement entre parenthèses
Contribution :
this is (test.com)
Sortie désirée:
test.com
Réponses:
Voici quelques options qui impriment toutes la sortie souhaitée:
Utilisation grepavec le -odrapeau (n'imprimer que la partie correspondante de la ligne) et les expressions régulières compatibles Perl ( -P) qui peuvent faire des contournements :
printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
Cette expression régulière pourrait nécessiter quelques explications:
(?<=\(): Ceci est un lookbehind positif , le format général est (?<=foo)baret qui correspondra à tous les cas de barrecherche juste après foo. Dans ce cas, nous recherchons une parenthèse ouvrante, nous utilisons donc \(pour y échapper.
(?=\)): Ceci est une anticipation positive et correspond simplement à la parenthèse fermante.
L' -ooption de le grepfait imprimer uniquement la partie correspondante de n'importe quelle ligne, nous recherchons donc tout ce qui est entre parenthèses, puis les supprimons avec sed:
printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
Analysez le tout avec Perl:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
Analysez le tout avec sed:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
Une approche consisterait à utiliser PCRE - Expressions régulières compatibles Perl avec grep:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com