全部博文(2065)
分类: LINUX
2010-01-13 15:12:59
Linux中grep使用
[整理人:hkebao@126.com 整理时间:
通过使用grep 可以方便进行对文本文件进行模式查找。如果找到匹配的模式就会打印包含模式的所有行。
它一共包含了三种变形:
Grep: 标准
Egrep: 扩展grep 支持基本的及扩展的正则表达式。但不支持\q模式范围的应用
Fgrep: 快速grep 允许查找字符串而不是一个模式。
8.1 grep
Grep的一般格式为:
Grep [选项] 基本正则表达式 [文件]
基本正则表达式可为字符串。
输入字符串参数时,最好使用双引号。如”mystring”
在调用模式匹配时应使用单引号
常用的选项:
-c 只输出匹配行的计数
-i 不区分大小写(只适用于单字符)
-h 查询多文件时不显示文件名
-l 查询多文件时只输出包含匹配字符的文件名
-n 显示匹配行及行号
-s 不显示不存在或无匹配文本的错误信息
-v 显示不包含匹配文本的所有行
示例:在当前目录下所有的 .py 文件中查找字符串”sort”
表达式为:
grep "sort"
*.py
或在所有文件中查询单词 “sort it”
grep "sort it"
*
grep -c
"from" ez_setup.py 表示在当前目录的 ez_setup.py 中查找包含了from 的行数
第几行!
显示满足匹配模式的所有行行数
grep -n
"from" ez_setup.py
grep -v
"from" ez_setup.py 表示所有不包含from 的各行
如果抽取48字符串。返回结果可能包含484
483 这样的。如果要想精确抽取只包含48的各行
可以用:
grep
"from
默认grep 是大小写敏感。如果要查询大小写不敏感字符串,必须使用-I 开关。
就是说如果用了这个选项就表示大小写不敏感了!
grep -i
"from
8.2 正则表达式
使用正则表达式可以抽取更多的信息出来。而且正则表达式是用单引号括起来。
如果要抽取代码为484 与 483的城市位置
$grep ‘48[43]’
data.f
中间就是写了一个正则表达式了。
如果要抽出记录,使其行首不是48可以写这样的正则
$grep ‘^[^48]’
data.f
如:grep ‘[A-Z][A-Z]..C’ data.f
表示以两个大写字母打头,中间任意两个字符然后以C结尾。
选项-E 可以扩展模式匹配。
示例:要抽取城市代码为 219 或 216 方法如下:
$grep –E ‘219|
$grep ‘[0-9]\{3\}\.[0-0\[3\}\.’
Ipfile
8.3 类名
可以使用国际字符模式匹配或匹配模式的类名形式。
类名及其等价的正则表达式
类 等价的正则表达式
[[:upper:]] [A-Z]
[[:lower:]] [a-z]
[[:digit:]] [0-9]
[[:alnum:]] [0
[[:space:]] 空格或tab 键
[[:alpha:]] [a-zA-Z]
示例:要抽取产品代码,该代码以5开头,后跟至少两个大写字母。可用
grep
'5[[:upper:]][[:upper:]]' * 就用了类来代替原来的写法!
8.4 系统grep命令
目录
如果要查询目录列表中的目录可用:
ls -l | grep '^d' 可以查询目录列表中的目录
ls -l | grep
'^[^d]' 在一个目录中查询不包含目录的所有文件
PS X 命令意为显示系统上运行的所有进程列表。
如果要查看DNS服务器是否正在运行. 方法如下:
ps ax | grep
"named"
(这个命令我们经常会用到。查看某个进程是否还存在的时候)
Grep不只应用于文件还可以应用于字符串。
echo "Mary
Joe" |grep "Mary" 就是针对某个字符串的操作!
能过文件快速查找字符串或模式,grep是一个很好的选择。