Sed Captinging Повторяющиеся группы номеров - PullRequest
3 голосов
/ 07 мая 2019

Я пытаюсь использовать sed для захвата группы, как в следующих примерах:

123123 (i would want the first group 123)
144144 (I would want the group 144)

однако sed, похоже, не понимает, что такое \ 1.

Есть ли способ сделатьэто с помощью sed?Я хочу заменить первую группу определенной строкой впоследствии.

([0-9]+)\1 

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

также пытался это сделать:

~/Desktop$ cat file
123123
23231
12323
123231
12345
144144
~/Desktop$ sed -n 's/.*\b\([[:digit:]]\{1,\}\)\1\b.*/\1/p' file
~/Desktop$ 

~/Desktop$ sed -n -E 's/([0-9]+)\1/specificstring\1/p' file
specificstring12323
specificstring2323
specificstring12323
specificstring14444

~/Desktop$ sed -nE 's/^([0-9]+)\1([^0-9]|$)/\1/p' file
2323
12323

Ответы [ 3 ]

3 голосов
/ 07 мая 2019

Используйте BRE и избегайте использования +, так как он не является частью POSIX RE.

$ cat file
123123
23231
12323
123231
12345
144144
$ 
$ sed -n 's/^\([0-9]\{1,\}\)\1$/\1/p' file
123
144
1 голос
/ 07 мая 2019

Учитывая, что файл содержит только 6 цифр и ничего больше, это не может быть сделано так:

sed -n 's/\([0-9]\{3\}\)\1/\1/p' file
1 голос
/ 07 мая 2019

Я хочу заменить первую группу определенной строкой впоследствии.

С GNU sed:

sed -n -E 's/([0-9]+)\1/specificstring\1/p' file

Еда на вынос

  • -n подавляет вывод, который мы переопределяем с помощью флага печати (p) команды s.
  • -E включает расширенные регулярные выражения.

Примечание Однако это не выводит строки, где нет идентичных групп, существование которых не упоминается в вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...