文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Linux GNU grep

Linux GNU grep

时间:2008-07-08  来源:benxiong

1.GNU grep 格式    

grep 'pattern' filename(s)

grep -E 'pattern' filename(s)     等同egrep 'pattern' filename(s)

grep -F 'pattern' filename(s)     等同fgrep 'pattern' filename(s)

grep -P 'pattern' filename(s)

2.grep支持的正则表达式元字符集

2.1 基本集

 元字符  功能
 ^  行首定位符
 $  行尾定位符
 .  匹配单个字符
 *  匹配零个或多个字符
 []  匹配集合中的一个字符
 [^]  匹配非集合中的一个字符
 \<  词首定位符
 \>  词尾定位符
 \(..\)  标签匹配字符
 x\{m\}

 字符x重复m次

 x\{m,\}  字符x重复至少m次
 x\{m,n\}  字符x重复m到n次
 \w  所有字母与数字,称为[a-zA-Z0-9_]
 \W  所有字母与数字之外的字符,称为非字符[^a-zA-Z0-9_]
 \b  词边界
2.2 扩展集  
 元字符  功 能
 +  匹配一个或多个前导字符
 ?  匹配零个或一个前导字符
 a|b|c  匹配a或b或c
 ()  组字符
 (..)(..)\1\2  标签匹配字符
 x{m}  字符x重复m次
 x{m,}  字符x重复至少m次
 x{m,n}   字符x重复m到n次
  2.3 POSIX元字符  
 括号类  含义
 [:alnum:]  字母与数字两种字符
 [:alpha:]  字母字符
 [:cntrl:]  控制字符
 [:digit:]  数字字符
 [:graph:]  非空字符(不包含空格、控制字符等)
 [:lower:]  小写字母
 [:print:]  与[:graph:]类似,但包含空格字符
 [:punct:]  标点字符
 [:space:]  所有的空白字符(换行符,空格符,制表符)
 [:upper:]  大写字母
 [:xdigit:]  十六进制数字字符(0-9a-fA-F)
  3. grep的选项  
 选项  作用

 -#

(# 是一个用来代表整数值的符号)

将匹配行前后#行的内容一同打印出来:也就是说,grep -2 pattern filename将导致grep打印匹配行的前两行和后两行 
 -A #, --after-context=#  打印匹配行后面#行的内容:也就是说,匹配行及它后面指定的#行内容
 -B #, --before-context=#  打印匹配行前面#行的内容:也就是说,匹配行及它前面指定的#行内容
 -C #, --context=# 等价于-2选项。打印匹配行的前两行和后两行 
 -V, --version  打印grep版本信息,版本信息应当包含在所有的bug报告中
 -a,--text,--binary-files=text  将二进制文件当作文本文件处理
 -b,--byte-offset  在输出的每行前显示便宜字节数
 -c,--count  为每行输入文件打印成功匹配的行数。-v则打印一些未匹配的行数
 -D action,--devices=action  如果输入文件为一个设备,如套接字或管道。则action默认从该设备读,就如同读一个普通文件一样。如果action为skip,则该设备被忽略
 -e PATTERN,--regexp=PATTERN  使用字面PATTERN作为模式:这对保护以-开头的模式非常有帮助
-f FILE, --file=FILE   从FILE中获得模式,每行一个。空文件包含0个模式,因此什么也不能匹配
 --help--  显示相关grep命令行选项及错误报告地址的帮助信息,然后退出
 -h,--no-filename  当搜索多个文件时,禁止输出文件名前缀
 -i,--ignore-case  忽略模式和输入文件的大小写区别
 -L,--files-without-match  仅打印所有未能匹配模式的文件名
 -l,--files-with-matches  仅打印所有正确匹配模式的文件名
 -m #,--max-count-#  如果文件是标准输入或正规文件,在找到指定数量(#)的匹配行后停止读文件
 -n,--line-number  在匹配成功的输出行前加上行号为前缀
 -q, --quiet  禁止正规输出。可用来替代-n
 -r,-R,--recursive,--directories=recurse  对列出的目录,递归地读并处理这些目录中的所有文件;也就是指该目录下的所有目录
 -s,--silent  禁止显示文件不存在或文件不可读的错误信息
 -v, --revert-match  转换匹配性质,选择非匹配行
 -w,--word-regexp  仅选择包含词匹配的行。匹配词边界上包含字母、数字和下划线的字符串
 -x,--line-regexp  仅选择精确匹配整行的哪些匹配
 -y  与已废除的-i同义
 -U,--binary  将文件作为二进制文件处理。仅有MS-DOS和MS-Windows支持该选项
 -u,--unix-byte-offsets  报告UNIX风格的字节偏移。这个选项仅在同时使用-b选项的情况下才有效;仅有MS-DOS和MS-Windows支持该选项 
 -Z,--null  在文件名的末尾放上ASCII空字符以取代换行符
  4. 使用   4.1 返回值   grep返回的退出状态为0,表示成功,如果找不到模式,grep返回1,而当找不到要搜索的文件时,返回的退出状态是2。   4.2 使用元字符(特殊情况)   grep 使用基本元字符集,也可以使用POSIX元字符集,egrep(grep -E)还可以使用扩展集。   默认设置的grep也可以使用扩展集中的元字符,仅需要对这些元字符前置一个反斜线。如:  

grep '3\+' datafile
grep -E '3+' datafile
egrep '3+' datafile

打印所有包含一个或多个3的行

 

grep '\(no\)\+' datafile
grep -E '(no)+' datafile
egrep '(no)+' datafile

打印包含一个或多个模式组no的行。

 

grep 'x\{m,n\}' datafile
grep -E 'x{m,n}' datafile
egrep 'x{m,n}' datafile

打印包含m个到n个x的行

 

grep 'S\(h\|u\)' datafile
grep -E 'S(h|u)' datafile
egrep 'S(h|u)' datafile

打印所有包含一个S后跟一个h或u(如Sh或Su)的行。

4.3 使用POSIX元字符

这种字符类,例如,[:alnum:]是A-Za-z0-9的另一种表达方式。为使用这种字符类,它必须使用另外一对括号进行引用以将其标识为一个正则表达式。例如,A-Za-z0-9本身并不是正则表达式,但[A-Za-z0-9]是。同样的,[:alnum:]应写作[[:alnum:]]。

4.4 固定的grep(grep -F 和fgrep)

它不能够识别任何正则表达式元字符的特殊意义。所有的字符仅能代表它们自身。如:

fgrep '[A-Z]****[0-9]' file

grep -F '[A-Z]****[0-9]' file

查找文件中包换[A-Z]****[0-9]的行。

4.5 使用选项

无论哪种形式的grep(egrep,fgrep) ,都可以使用选项。举个有点意思的例子:

$echo $LOGNAME
hrwang
$grep -i "$LOGNAME" datafile
Hrwang is a boy
$egrep -i "$LOGNAME" datafile
Hrwang is a boy
$fgrep -i "$LOGNAME" datafile
Hrwang is a boy

打印了shell环境变量LOGNAME的值,如果该变量被双引号引用,它还将被shell扩展。加入给该变量赋的值多于一个词,则shell进行解释时将屏蔽空白。如果是被单引号引用,则不会进行变量替换,也就是说,将会打印$LOGNAME。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载