Я должен заменить каждым строки, состоявшие из 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\}
Сделайте:
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