Что делает \ 1 в sed? - PullRequest
       7

Что делает \ 1 в sed?

19 голосов
/ 06 января 2011

Я нашел этот вопрос действительно соответствующим тому, что я хотел: Разбор с использованием awk или sed в Unix , но я не могу понять, что делает следующее:

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

Iзнаю, что g выполняет глобальную замену, но на самом деле не может понять, что происходит в контексте вопроса.

Ответы [ 2 ]

37 голосов
/ 06 января 2011

Вот простой пример:

$ 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

В первой команде затрагивается только первое совпадение.Во второй команде, каждый матч затрагивается.В обоих случаях \1 относится к символам, захваченным экранированными скобками.

В третьей команде указываются две группы захвата.На них ссылаются с помощью \1 и \2.Можно использовать до девяти групп захвата.

Помимо оператора g (global) (или без него, первое совпадение), вы можете указать конкретное совпадение:

$ echo 'aaaaaa' | sed 's/a/A/4'
aaaAaa
13 голосов
/ 06 января 2011

\(...\) будет захватывать символы, указанные внутри паренов, а \1 будет использоваться для ссылки на первое совпадение, это часть регулярного выражения.

...