![使用 Sed 和 Grep 过滤连续相同的字符](https://linux22.com/image/1085544/%E4%BD%BF%E7%94%A8%20Sed%20%E5%92%8C%20Grep%20%E8%BF%87%E6%BB%A4%E8%BF%9E%E7%BB%AD%E7%9B%B8%E5%90%8C%E7%9A%84%E5%AD%97%E7%AC%A6.png)
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