Comment puis-je faire correspondre Word uniquement entre parenthèses
Entrée: this is (test.com)
Sortie désirée: test.com
Voici quelques options, qui impriment toutes la sortie souhaitée:
Utilisation de grep
avec le -o
flag (imprime uniquement la partie correspondante de la ligne) et les expressions régulières compatibles Perl (-P
) qui peut faire lookarounds :
printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
Cette expression régulière pourrait nécessiter quelques explications:
(?<=\()
: Il s'agit d'un lookbehind positif , le format général est (?<=foo)bar
et cela correspondra à tous les cas de bar
trouvés juste après foo
. Dans ce cas, nous recherchons une parenthèse ouvrante, nous utilisons donc \(
pour y échapper.
(?=\))
: Ceci est un lookahead positif et correspond simplement à la parenthèse fermante.
Le -o
option à grep
fait en sorte qu'elle n'imprime que 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