前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习Grep,Sed中的正则

学习Grep,Sed中的正则

作者头像
LA0WAN9
发布2021-12-14 07:55:42
7760
发布2021-12-14 07:55:42
举报
文章被收录于专栏:火丁笔记

正则要是几天不学习不用功,肯定会忘得一干二净,下面聊聊Grep,Sed中的正则。

问题:从一个文本文件里筛选出含有电话号码的行,电话号码是由七位或者八位阿拉伯数字组成(开头不是零),并且被单引号或者双引号包裹。

鉴于问题的需要,先杜撰一份数据:

代码语言:javascript
复制
shell> cat /path/to/data.txt
'7654321'
'7654321"
"87654321"
"87654321'

失败的尝试

代码语言:javascript
复制
shell> grep "(['\"])[1-9][0-9]{6,7}\1" /path/to/data.txt
grep: Invalid back reference
shell> sed -n "/(['\"])[1-9][0-9]{6,7}\1/p" /path/to/data.txt
sed: -e expression #1, char 25: Invalid back reference

成功的尝试

使用Basic Regular Expressions (BRE)

代码语言:javascript
复制
shell> grep "\(['\"]\)[1-9][0-9]\{6,7\}\1" /path/to/data.txt
'7654321'
"87654321"
shell> sed -n "/\(['\"]\)[1-9][0-9]\{6,7\}\1/p" /path/to/data.txt
'7654321'
"87654321"

使用Extended Regular Expressions (ERE)

代码语言:javascript
复制
shell> grep -E "(['\"])[1-9][0-9]{6,7}\1" /path/to/data.txt
'7654321'
"87654321"
shell> sed -n -r "/(['\"])[1-9][0-9]{6,7}\1/p" /path/to/data.txt
'7654321'
"87654321"

总结:Grep和Sed同时支持BRE和ERE两种正则,缺省情况下,Grep和Sed使用的都是BRE正则,通过增加命令参数(grep -E / sed -r),Grep和Sed可以支持ERE正则。

BTW:Regular expression From Wikipedia, the free encyclopedia

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 失败的尝试
  • 成功的尝试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档