Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26187977
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: LINUX

2010-01-13 15:12:59

Linuxgrep使用

[整理人:hkebao@126.com  整理时间:2010-1-12]

通过使用grep 可以方便进行对文本文件进行模式查找。如果找到匹配的模式就会打印包含模式的所有行。

它一共包含了三种变形:

Grep:                   标准

Egrep:        扩展grep 支持基本的及扩展的正则表达式。但不支持\q模式范围的应用

Fgrep:        快速grep 允许查找字符串而不是一个模式。

8.1 grep

Grep的一般格式为:

Grep [选项] 基本正则表达式 [文件]

基本正则表达式可为字符串。

8.1.1 双引号引用

输入字符串参数时,最好使用双引号。如”mystring”

在调用模式匹配时应使用单引号

8.1.2 grep选项

常用的选项:

-c      只输出匹配行的计数

-i       不区分大小写(只适用于单字符)

-h      查询多文件时不显示文件名

-l       查询多文件时只输出包含匹配字符的文件名

-n      显示匹配行及行号

-s      不显示不存在或无匹配文本的错误信息

-v      显示不包含匹配文本的所有行

8.1.3 查询多个文件

示例:在当前目录下所有的 .py 文件中查找字符串”sort” 表达式为:

grep "sort" *.py

或在所有文件中查询单词 “sort it”

grep "sort it" *

8.1.4 行匹配

grep -c "from" ez_setup.py            表示在当前目录的 ez_setup.py 中查找包含了from 的行数 第几行!

8.1.5 行数

显示满足匹配模式的所有行行数

grep -n "from" ez_setup.py

8.1.6 显示非匹配行

grep -v "from" ez_setup.py           表示所有不包含from 的各行

8.1.7 精确匹配

如果抽取48字符串。返回结果可能包含484 483 这样的。如果要想精确抽取只包含48的各行

可以用:

grep "from" ez_setup.py               表示只包含了from

8.1.8 大小写敏感

默认grep 是大小写敏感。如果要查询大小写不敏感字符串,必须使用-I 开关。

就是说如果用了这个选项就表示大小写不敏感了!

grep -i "from" ez_setup.py            表示大小写不敏感了

 

8.2 正则表达式

使用正则表达式可以抽取更多的信息出来。而且正则表达式是用单引号括起来。

8.2.1 模式范围

如果要抽取代码为484 483的城市位置

$grep ‘48[43]’ data.f

中间就是写了一个正则表达式了。

8.2.2 不匹配行首

如果要抽出记录,使其行首不是48可以写这样的正则

$grep ‘^[^48]’ data.f

如:grep ‘[A-Z][A-Z]..C’ data.f

表示以两个大写字母打头,中间任意两个字符然后以C结尾。

 

8.2.8 使用grep 匹配“与“或”或“模式

选项-E 可以扩展模式匹配。

示例:要抽取城市代码为 219 216 方法如下:

$grep –E ‘219|216’ data.f

 

8.2.12 查询IP地址

$grep ‘[0-9]\{3\}\.[0-0\[3\}\.’ Ipfile

 

8.3 类名

可以使用国际字符模式匹配或匹配模式的类名形式。

类名及其等价的正则表达式

                        等价的正则表达式

[[:upper:]]           [A-Z]

[[:lower:]]            [a-z]

[[:digit:]]              [0-9]

[[:alnum:]]           [0-9a-zA-Z]

[[:space:]]            空格或tab

[[:alpha:]]            [a-zA-Z]

示例:要抽取产品代码,该代码以5开头,后跟至少两个大写字母。可用

grep '5[[:upper:]][[:upper:]]' *                 就用了类来代替原来的写法!

8.4 系统grep命令

目录

如果要查询目录列表中的目录可用:

ls -l | grep '^d'               可以查询目录列表中的目录

ls -l | grep '^[^d]'           在一个目录中查询不包含目录的所有文件

 

8.4.3 使用ps命令

PS X 命令意为显示系统上运行的所有进程列表。

如果要查看DNS服务器是否正在运行. 方法如下:

ps ax | grep "named"             

 

(这个命令我们经常会用到。查看某个进程是否还存在的时候)

8.4.4 对一个字符串使用grep

Grep不只应用于文件还可以应用于字符串。

echo "Mary Joe" |grep "Mary"  就是针对某个字符串的操作!

 

能过文件快速查找字符串或模式,grep是一个很好的选择。

 

阅读(1160) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-07-09 11:53:06

-v 显示不包含匹配文本的所有行 哈哈今天居然把它给忘记了