我需要替换每个由 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\}
答案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