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 grep
avec le -o
drapeau (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)bar
et qui correspondra à tous les cas de bar
recherche 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' -o
option de le grep
fait 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