Linux日常——shell工具之grep(包含正则表达式)、sed
2017-07-02 22:38
746 查看
grep行过滤器
grep是⼀种查找过滤⼯具正则表达式在grep中⽤来查找符合模式的字符串。
egrep相当于grep -E,表⽰采⽤Extended正则表达式语法。
fgrep相当于grep - F,表⽰只搜索固定字符串⽽不搜索正则表达式模式,不会按正则表达式的语法解释后⾯的参数。
grep的正则表达式 有Basic和Extended两种规范,它们之间的区别下面有解释。
正则表达式
规定:⼀些特殊语法表⽰字符类、数量限定符和位置关系,然后⽤这些特殊语法和普通字符⼀起表⽰ ⼀个模式,这就是正则表达(RegularExpression)字符类(Character Class):如上例的x和y,它们在模式中表⽰⼀个字符,但是取值范围是 ⼀类字符中的任意⼀个。
数量限定符(Quantifier): 邮件地址的每⼀部分可以有⼀个或多个x字符,地址的每⼀部分可以有1-3个y字符
位置限定符(Anchor):描述各种字符类以及普通字符之间的位置关系,例如邮件地址分三部分,⽤普通字符@和.隔 开,IP地址分四部分,⽤.隔开,每⼀部分都可以⽤字符类和数量限定符描述。
正则表达式还有⼀个重要的应⽤是验证⽤户输⼊是否合法,例如⽤户通过⽹页表单提交⾃⼰的email 地址,就需要 ⽤程序验证⼀下是不是合法的email 地址,这个⼯作可以在⽹页的Javascript 中做,也可以在⽹站后台的程序中做,例如PHP、Perl、Python、Ruby、Java或C,所有这些语⾔都⽀持正则表达式,可 以说,⽬前不⽀持正则表达式的编程语⾔实在很少见。除了编程语⾔之外,很多UNIX 命令和⼯具 也都⽀持正则表达式,例如grep、vi、sed、awk、emacs等等。“正则表达式”就像“变量”⼀样,它 是⼀个⼴泛的概念,⽽不是某⼀种⼯具或编程语⾔的特性。
注意正则表达式参数⽤单引号括起来了,因为正则表达式中⽤到的很多特殊字符在Shell中也有特殊 含义(例如),只有⽤单引号括起来才能保证这些字符原封不动地传给grep命令,⽽不会被Shell解释掉。
规范:grep默认Basic规范
Basic与Extended的区别
Basic:? {} + | () 默认为普通字符,加 \ 转义为特殊字符Extended:? {} + | () . 默认为特殊字符,加 \ 转义为普通字符、
所以:
要求筛选出正确形式的QQ邮箱:
grep -E –color ‘[1-9][0-9]{5,12}@qq.com’
等价于:
grep -E –color ‘[1-9][0-9]{5,12}@qq.com’
实例
匹配电话号码
grep '^1[34578][0-9]{9}$' test.c
匹配ip
grep '^[12][0-9]{0,2}(\.[0-9]{0,3}){3}$' test.c
匹配163邮箱
grep '^[a-zA-Z0-9_]{1,}@163\.com$' test.c
sed—流式编辑器(Strea
abab
m Editor)
功能:sed主要用来自动编辑一个或多个文件,简化对文件的反复操作介绍:把前一个程序的输入引入sed的输入,经过一系列编辑命令转换为另一种格式输出,它处理的⽂件既可以由标准输⼊重定向得到,也可以当命令⾏参数传⼊,命令⾏参数可以⼀次传⼊多个⽂件,sed会依次处理。
格式: sed ‘/pattern/action’ filename
pattern–正则表达式
action–编辑操作
处理数据:如果某一行与pattern匹配,则执行对应的action,如果一条命令没有pattern只 有action,则这条命令的action将用于待处理文件的每一行。
sed是一种在线编辑器,按行处理文件。
模式空间(pattern space):处理时,把当前处理的行存储在临时缓冲区中,该缓冲区称为“模式空间”。
sed处理缓冲区的内容,最后将处理完成后的内容送往屏幕。接着处理下一行,不断重复直到文件末尾。
要注意,此时文件内容并没用改变, 除非使用了重定向存储输出或者使用了 -i 选项。
规范:sed默认Basic规范基本匹配
模式空间和保持空间
模式空间:可以想成⼯程⾥⾯的流⽔线,数据直接在它上⾯进⾏处理。进行正则匹配
保持空间:可以想象成仓库,我们在进⾏数据处理的时候,作为数据的暂存区域。
1.sed在正常模式下,将处理的行读入模式空间(在正常模式下,只使用模式空间)
2.模式空间,保持空间为两段缓冲区
3.数据处理只能在保持空间
4.只有在sed使用某些命令时才使用保持空间,命令括在‘ ’里
5.正常情况下,如果不显⽰使⽤某些⾼级命令,保持空间不会使⽤到。
文本处理处理过程
sed命令:
+ g:[address[,address]]g 将hold space中的内容拷⻉到pattern space中, 原来pattern space⾥的内容清除 //get + G:[address[,address]]G 将hold space中的内容append到pattern space\n后 + h:[address[,address]]h 将pattern space中的内容拷⻉到hold space中, 原来的hold space⾥的内容被清除 //hold + H:[address[,address]]H 将pattern space中的内容append到hold space\n后 + d:[address[,address]]d 删除pattern中的所有行,并读入下一新⾏到 pattern中 //delete + D:[address[,address]]D 删除multiline pattern中的第一行,不读入下一行⼀⾏ + x:交换保持空间和模式空间的内容 + n:将下一行读取到pattern space,覆盖 //next + N:将下一行读取到pattern space,追加
1.注释代码
sed '/printf/s/^/\/\//g' test.c
但此时文件并没有改变,要加上-i选项
sed -i '/printf/s/^/\/\//g' test.c
2.去注释
sed -i '/printf/s/\/\//g' test.c
相关文章推荐
- linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)
- Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
- Shell正则表达式之grep、sed、awk实操笔记
- sed:linux常用工具 & 基本正则表达式
- Linux中正则表达式与文件格式化处理命令(awk/grep/sed)
- Linux基础-正则表达式整理---------------grep、sed、awk
- 转――[Shell学习笔记] Shell正则表达式与grep、sed、awk的特点
- Linux 常用命令sed/awk/grep及正则表达式
- Linux 文本处理工具、grep、正则表达式
- Shell正则表达式之grep、sed、awk 与鸟哥Linux私房菜搜藏
- Linux 文本处理,文本工具,查看,分析,统计文本文件,grep,正则表达式
- Linux---文本处理(正则表达式,grep,awk,sed)
- Linux 正则表达式 vi, grep, sed, awk
- Linux的文本处理工具及grep正则表达式的使用
- Linux:正则表达式及:grep工具
- 正则表达式和grep、sed工具
- 【每天一个Linux命令】17. 强大的文件搜索工具grep&&正则表达式
- Linux中正则表达式与文件格式化处理命令(awk/grep/sed)
- Linux:正则表达式及:grep工具
- shell下正则表达式与其工具grep