如何匹配在一定范围内重复一定次数的重复字符的字符串?

如何匹配在一定范围内重复一定次数的重复字符的字符串?

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

  • 替换修饰语gs)替换所有此类单词

要匹配任何字符(而不仅仅是字母),请替换[[: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

相关内容