使用 Sed 和 Grep 过滤连续相同的字符

使用 Sed 和 Grep 过滤连续相同的字符

sed如何使用和查找三个连续且相同的单词字符的出现,例如“aaa”,“bbb”等 grep

我想要找出长度为 3 且由重复字符组成的单词,即单词的所有字符必须相同。

答案1

使用sed

sed -n '/\(^\| \)\([A-Za-z]\)\2\2\($\| \)/p' file

使用grep

grep '\(^\| \)\([A-Za-z]\)\2\2\($\| \)' file
  • \(^\| \): 匹配行首或者一个字符;
  • \([A-Za-z]\):匹配并分组任意大写或小写字母字符;
  • \2: 匹配先前分组的字符;
  • \2: 匹配先前分组的字符;
  • \($\| \): 匹配行尾或字符;
~$ cat file
aa word word
word wordaaaword word
aAa word word
aaa word word
word bbb word
word word ccc
aaaa word word
~$ sed -n '/\(^\| \)\([A-Za-z]\)\2\2\($\| \)/p' file
aaa word word
word bbb word
word word ccc
~$ grep '\(^\| \)\([A-Za-z]\)\2\2\($\| \)' file
aaa word word
word bbb word
word word ccc

答案2

在这种情况下,我更喜欢注释(抱歉更改了问题!☺)

而不是找到,这个版本分数带有“”。的图案

sed -r 's/(\w)\1\1/"&"/g; 
        s/"(..(\w))"\2/\2\1/g'
  • s/(\w)\1\1/"&"/g; 替代品...aaa=>..."aaa"
  • s/"(..(\w))"\2/\2\1/g修复超过 3 个字符..."aaa"a=>aaaa

例子:

aa word wordaaaword word aAa word aaa word
word bbb word word ccc aaaa word word

输出

aa word word"aaa"word word aAa word "aaa" word
word "bbb" word word "ccc" aaaa word word

更新(应对问题中的新要求):

sed -r 's/\<(\w)\1\1\>/"&"/g' ex1

输出:

aa word wordaaaword word aAa word "aaa" word
word "bbb" word word "ccc" aaaa word word

相关内容