linux shell编程文本处理命令grep
linux中最为常用的三大文本(awk,sed,grep)处理工具之一,grep可以理解为过滤,通用的正则表达式分析程序,grep家族总共有三个:grep、egrep、fgrep。
pattern 模式 --》模板
使用基本正则表达式
模式–》正则表达式–》用来表达某个意思–》利用正确的规则组合成一个公式,用来表达某个意思。
正则表达式–》是一些字符串,数字,特殊符号组合而成。
用途:在文件中查找并显示包含指定字符串的行
格式:grep [选项]... 模式 目标文件
-i:查找时忽略大小写 ignore case
-v:反转查找,输出与模式不相符的行 -v, --invert-match
-n:显示符合模式要求的行号 number
-r:递归搜索所有文件
-o:只显示匹配的内容 -o, --only-matching
-E: 支持更多的元字符(支持扩展正则) -E, --extended-regexp regular expression 正则表达式
元字符:有特殊作用的字符 ^ $ 基本元字符 ^ $ *扩展元字符 | + ? { } egrep = grep -E| 或者
-A: 找到匹配行以及后几行
-B:输出匹配行以及前几行
-C:输出前面和后面多少行
^ 代表以什么开头$ 代表以什么结尾^$ 代表空行
^liuyong$ 一行里只有liuyong字符串
[1-9] 代表从1到9的任意一个数字[a-Z] 从a-Z中取一个[a-z] 从a-z中取一个[A-Z] 从A-Z中取一个[0-Z] 从0-9 和a-Z中取一个[^0-Z] 不取0-Z的字符 -->取反
举例
cat /etc/passwd |egrep "^ly[1-9]"cat /etc/passwd |egrep "^root" 以root开头的行 cat /etc/passwd |egrep "bash$" 以bash结尾的行cat /etc/ssh/sshd_config |egrep -v "^$|^#"
通配符
* 代表匹配前一个项任意次? 代表匹配前一个项0次或者1次+ 代表匹配前一个项 一次到多次. 占位符 除\n之外的任意字符{n,m} 匹配前一项n到m次.* 代表任意字符
例子
写一个c类ip地址的正则
c类ip地址范围192~2230~255
cat test.txt | egrep "(19[2-9]|2[01][0-9]|22[0-3])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}"