[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
如何匹配字符或字符串的多次出现
Wu Zhangjin 创作于 2019/09/23
By Falcon of TinyLab.org Aug 01, 2019
经常需要匹配某个字符或者字符串的多次出现,但是很难记住,每次要的时候翻箱倒柜,特别痛苦,这里速记一下。
匹配所有连续出现 4 次及以上字符
$ echo "0000aabbaabbbffffccc" | grep -oE "(\w)\1{3,}"
0000
ffff
匹配连续出现 2 次及以上的字符串
$ echo "00xxyyxxyyxxyy000aabbaabbffccffccggccabababc" | grep -oE "(((\w){1,})[^\2])\1{1,}"
xxyyxxyyxxyy
aabbaabb
ffccffcc
ababab
匹配连续出现 2 次及以上指定字符串
$ echo "00000aaabbaabbbffffccc" | grep -oE "(aabb){2,}"
aabbaabb
或者
$ echo "00000aaabbaabbbffffccc" | grep -oE "(aabb)\1{1,}"
aabbaabb
匹配连续出现 2 次及以上指定字符
$ echo "00000baabbabb" | grep -oE "(a|b)\1{1,}"
aa
bb
bb
小结
- 上面有几处用了引用
\1
这个是很关键的用法,例如如果第 4 个用 "(a|b){2,}"
,就可能匹配到 ab, bb, aa, ba
等所有条件,而 ab
和 ba
并不是我们想要的。
- 正则表达式的语法差异
grep
不带 -E
的时候,{}
等符号都得带转义,不是很好用,另外,这个表达式在 sed/awk
可能又不同。大体的逻辑是一致的,这里不再比较差异,待后续再做记录。
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |