文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>《Linux & Unix Shell Programming Tool》学习笔..

《Linux & Unix Shell Programming Tool》学习笔..

时间:2007-09-13  来源:Ksharp

第八章 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至少重复出现两次的所有行:
$ 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相同,就不举例了。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载