Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

$ 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 (глобальный) (или без него, первое совпадение) вы можете указать конкретное соответствие:

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

Ответ 2

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