Пожалуйста, постарайтесь понять свои инструменты и то, что вы делаете.
Для активации SSH на Mac выберите «Системные настройки» -> «Общий доступ» и установите флажок «Удаленный вход».
Диспетчер команд/пакетов apt
предназначен для систем Linux на основе Debian -.
Проблема в том, что \1
относится к совпавшему тексту, а не является регулярным выражением. В нашем случае совпадающий текст — это символ a
. Поскольку \1
является текстом, а не регулярным выражением, ему все равно, что следует за a
. Соблюдайте:
$ cat file
a a
a ab
$ grep -E '(a\b) \1' file
a a
a ab
Если мы хотим, чтобы \1
было словом, добавьте к нему границу слова:
$ grep -E '(a\b) \1\b' file
a a
Поскольку \1\b
требует границы слова после \1
, вторая строка больше не соответствует.
Чтобы продемонстрировать, что \1
не является регулярным выражением, давайте попробуем:
$ echo '.a' | grep -E '(.)\1'
$
Но:
$ echo '..' | grep -E '(.)\1'
..
$
Таким образом, \1
соответствует .
. В то время как .
обычно является активным регулярным выражением -и соответствует любому символу, \1
будет соответствовать только точке.
Из руководства GNU grep:
The back-reference ‘\n’, where n is a single digit, matches the substring previously matched by the nth parenthesized subexpression of the regular expression. For example, ‘(a)\1’ matches ‘aa’. When used with alternation, if the group does not participate in the match then the back-reference makes the whole match fail. For example, ‘a(.)|b\1’ will not match ‘ba’. When multiple regular expressions are given with -e or from a file (‘-f file’), back-references are local to each expression. [emphasis added.]