Как может я строка совпадения, которые повторили, что символы повторили определенное число в диапазоне?

Я должен заменить каждым строки, состоявшие из 2 - 5 повторенных символов

Есть ли более компактное выражение, чем это

$ echo a aa aaa aaaa aaaaa aaaaaa| sed 's/a\{2\}/word/;s/a\{3\}/word/;s/a\{4\}/word/;s/a\{5\}/word/;' 
a word word word word aaaaaa

Например, путем предоставления диапазону кривой скобки (не работает), \{2|3|4|5\}

2
задан 5 October 2016 в 13:11

1 ответ

Сделайте:

sed -E 's/\b([[:alpha:]])\1{1,4}\b/word/g'
  • \b граница слова соответствий

  • ([[:alpha:]]) соответствия любой буквенный символ в текущей локали, и помещенный, что как полученная группа 1

  • \1{1,4} соответствует полученной группе 1 - 4 раза т.е. всего, символ подбирается 2 - 5 раз

  • если подобрано, слово заменяется строкой word

  • g модификатор замены (s) замените все такие случаи слов

Соответствовать любому символу, не только алфавитному, замена [[:alpha:]] с .:

sed -E 's/\b(.)\1{1,4}\b/word/g'

Пример:

$ echo 'a aa aaa aaaa aaaaa aaaaaa' | sed -E 's/\b([[:alpha:]])\1{1,4}\b/word/g'
a word word word word aaaaaa
4
ответ дан 2 December 2019 в 02:17

Другие вопросы по тегам:

Похожие вопросы: