grep简短说明

 第八章 grep家族
grep允许对文本文件进行模式查找。如果找到匹配模式则打印包含模式的所有行。grep支持正则表达式,也支持其扩展集。grep有三种变形:
grep: 标准grep命令
egrep: 扩展grep,支持基本及扩展的正则表达式,但不支持/q模式范围的应用
fgrep: 快速grep,允许查找字符串而不是一个模式
8.1    grep
格式:
grep [option] [regx] [file]
option: grep的参数
regx: 正则表达式(可为字符串)
file: 要查找的文件
8.1.1    双引号引用
使用grep查找字符串时需要用双引号将其引起来,一是为了防止被误解为shell命令,二是可以查找多个单词组成的字符串,举例:
$ grep “kevin” testfile
$ grep ”kevin is” testfile
在调用变量时,也应该使用双引号,举例:
$ grep “$name” testfile
在调用模式匹配(即使用正则表达式)时,应使用单引号,举例:
查找含有spawn或spawN的行
$ grep 'spaw[nN]' testfile
8.1.2    grep参数
常用的grep参数有:
-c    只输出匹配行的计数
-i    不区分大小写(只适用于单字符)
-h    查询多文件时不显示文件名
-l    查询多问监视只输出包含匹配字符的文件名
-n    显示匹配行及行号
-s    不显示不存在或无匹配文本的错误信息
-v    显示不包含匹配文本的所有行
-E    使用扩展模式匹配(相当于egrep)
-P    使用Perl的正则表达式
举例:
在当前目录下的所有.doc文件中查找字符串”sort”
$ grep “sort” *.doc
输出匹配行的行数:
$ grep -c “kevin” testfile
输出包含”kevin”的行及其行号:
$ grep -n “kevin” testfile
输出所有非匹配行:(查看配置文件时很有用)
$ grep -v “#” /etc/httpd.conf
使用grep抽取精确匹配的一种更有效的方法是在抽取字符串后加/> 举例:
$ grep 'kevin/>' testfile
输出匹配字符串的行(忽略大小写):
$ grep -i “sept” testfile

8.2    grep和正则表达式
在使用正则表达式时,需用单引号将pattern引起来。举例:
匹配Sept或sept:
$ grep '[Ss]ept' testfile
不匹配行首:(正则表达式中的^表示行首,[]中的^表示非)
$ grep '^[^kevin]' testfile (匹配行首不是kevin的行)
抽取包含数字4至少重复出现两次的所有行:h
$ grep '4/{2,/}' testfile
匹配kevin或tiffany的行:
$ grep -E 'kevin|tiffany' testfile
查询空行:
$ grep '^$' testfile
匹配特殊字符:
$ grep 'httpd/.conf' testfile(匹配httpd.conf)
匹配文件名格式:(匹配最多6个小写字符跟句点,然后是一到两个大写字符的文件)
$ grep '^[a-z]/{1,6/}/.[A-Z]/{1,2/}' testfile

$ grep -E '^[a-z]{1,6}/.[A-Z]{1,2}' testfile
匹配IP地址:(不考虑IP的正确性)
$ grep '[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}' testfile

$ grep -P '/d+/./d+/./d+/./d+' testfile

$ grep -E ' [0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}' testfile
或考虑IP正确性:(未严格测试)
$ grep -E '^(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)' testfile
匹配email地址:(不考虑Email的合法规则)
$ grep -E '/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*' testfile

$ grep -P '/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*' testfile

8.3    类名
grep允许使用国际字符模式匹配或匹配模式的类名形式
    类                等价的正则表达式
[[:upper:]]                  [A-Z]
[[:lower:]]                  [a-z]
[[:digit:]]                  [0-9]
[[:alnum:]]                [0-9a-zA-Z]
[[:space:]]                空格或tab
[[:alpha:]]                 [a-zA-Z]
举例:
匹配IP地址(不考虑IP的正确性)
$ grep -E '[[:digit:]]+/.[[:digit:]]+/.[[:digit:]]+/.[[:digit:]]+' file

8.4    系统grep命令
8.4.1    目录
查询目录列表中的目录
$ ls -l|grep '^d'
查询不包含目录的所有文件
$ ls -l|grep '^[^d] '
查询其他用户和用户组有可执行权限的目录
$ ls -l|grep '^d…..x..x'
8.4.2    passwd文件
查询是否存在某个用户
$ grep “kevin” /etc/passwd
可以使用-s参数屏蔽错误信息,如:
$ grep -s “keven” /etc/passwd
8.4.3    与ps命令结合使用
与ps配合使用grep常常用于查看服务的状态
$ ps -ef|grep httpd
使用-v选项排除grep本身的进程
$ ps -ef|grep httpd|grep -v “grep”
8.4.4    对一个字符串使用grep
grep也可应用于字符串
$ STR=”Kevin Tiffany Vivian”
$ echo $STR|grep “Kevin”

8.5    egrep
egrep代表expression或extended grep,接受所有的正则表达式。egrep的一个显著特性可以使用-f参数将一个文件作为保存的字符串,然后传给egrep。举例:
匹配data.f中包含484或47的所有记录
$ cat pattern
484
47
$ egrep -f pattern data.f
egrep的其他用法与grep -E相同,就不举例了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值