web-dev-qa-db-fra.com

Que fait \ 1 dans sed?

J'ai trouvé cette question vraiment pertinente pour ce que je voulais: analyser en utilisant awk ou sed dans Unix , mais je ne peux pas comprendre ce que fait ce qui suit:

's/\([,=]\) /\1/g'

Je sais que g effectue une substitution globale mais ne peut vraiment pas comprendre ce qui se passe dans le contexte de la question.

24
Abdullah Jibaly

Voici un exemple simple:

$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/'
ababcabc
$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/g'
ababab
$ echo 'abcabcabc' | sed 's/\(ab\)\(c\)/\1d\2/g'
abdcabdcabdc

Dans la première commande, seule la première correspondance est affectée. Dans la deuxième commande, chaque correspondance est affectée. Dans les deux cas, le \1 fait référence aux caractères capturés par les parenthèses échappées.

Dans la troisième commande, deux groupes de capture sont spécifiés. Ils sont référencés en utilisant \1 et \2. Jusqu'à neuf groupes de capture peuvent être utilisés.

En plus de l'opérateur g (global) (ou sans lui, la première correspondance), vous pouvez spécifier une correspondance particulière:

$ echo 'aaaaaa' | sed 's/a/A/4'
aaaAaa

\(...\) capturerait les caractères spécifiés à l'intérieur des parens et \1 Serait utilisé pour référencer la première correspondance, ceci fait partie de l'expression régulière.

16
meder omuraliev