grep命令学习整理

grep <Global search Regular Expression and Printout in line>:

 

       在给出文件列表或标准输入之后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配的文本。

 

工作原理

对输入(如文件、键盘)的每一行文本,grep命令进行如下操作:

1.      将改行文本读入相应的缓冲区,该缓冲区又被成为模式空间。

2.      对模式空间应用正则表达式进行对比。

3.      如果匹配,则改行信息从模式空间被复制到标准输出。

 

grep命令会对每一行文本重复以上3个步骤,其语法格式如下:

                                                grep [选项] 字符模式 [文件名1,文件名2…]

grep在一个或多个文件(文件名1,文件名2….)中搜索字符模式。如果该模式包含空格,则必须加上引号。

 

与正则表达式:

       正在表达式元字符集有两种版本:基本集和扩展集。grep的正则表达式元字符集使用的是基本集,egrep使用的是正则表达式元字符的扩展集。Linux中使用GNU版本的grep,可以通过-E、-F命令行选项来使用egrep和fgrep的功能。

Grep的正则表达式元字符集及说明如下表所示:

元字符

说明

例子

^

行首定位符,用于指定匹配字符串的头部

‘^grep’匹配所有以grep开头的行

$

行尾定位符,用于指定匹配字符串的尾部

‘grep$’匹配所有以grep结尾的行

.

匹配任意一个字符

‘g..p’匹配所有第一个字符是g,紧跟两个字符,最后以p结尾的字符串

*

匹配0个或多个前导字符

‘*grep’匹配所有一个或多个空格后紧跟grep的行

[]

表示匹配指定范围内的其中一个字符

‘[Gg]rep’匹配Grep和grep

[^]

匹配不在指定范围内的字符

‘[^A-FH-Z]rep’匹配不包含A-F和H-Z的字母开头,后紧跟rep

\<

词首定位符

‘\<grep’匹配以grep开头的单词的行

\>

词尾定位符

‘grep\>’ 匹配以grep结尾的单词的行

x\{m\}

重复字符x,m次

‘o\{5\}’匹配包含5个o的行

x\{m,\}

重复字符x,至少m次

‘o\{5,\}’匹配至少有5个o的行

x\{m,n\}

重复字符x,至少m次,不多于n次

‘o\{5,10\}’匹配5~10个o的行

 

常用grep选项及功能说明

元字符

说明

-b

在每行前打印字符偏移量(偏移的字符数)

-c

只打印匹配的总行数,不打印匹配内容

-n,  --line-number

在匹配的行前面打印行号

-V, --version

显示软件版本信息

-v,   --revert-match

反索引,只显示不匹配的行

-i , --ignore-case

忽略大小写差别

-h , --no-filename

当搜索多个文件时,不显示匹配文件名前缀

-s , --silent

不显示关于不存在或者无法读取文件的错误信息

-l , --files-with-matches

打印匹配模板的文件清单(grep –l ‘include’ *.c)

-L, --files-without-matches

打印不匹配模板的文件清单(grep  -L ‘include’ *.c)

-w , --word-regexp

使得grep只匹配按照单词方式匹配字符模式的行。(grep –m msg test.c)

 

grep的退出状态

grep还可以用shell脚本,因为grep通过返回一个状态值来说明搜索的状态。如果模式搜索成功,则返回0;如果搜索不成功,则返回1;如果搜索的文件不存在,则返回2。利用这些返回值就可进行一些自动的文本处理工作。

eg: 在/etc/passwd文件中搜索“bbb”。如果没有找到,退出状态为1;如果找到退出状态为0;如果/etc/passwd不存在,退出状态为2.

> grep ‘bbb’ /etc/passwd

> echo $?

可打印返回值

 

egrep: 表示扩展grep (extend grep)

       该命令执行效率比grep高,但需要占用较大内存空间,用于搜索更复杂的正则表达式。egrep与GNU grep 的-E选项相同,都能够使用正则表达式元字符的扩展集。

元字符

说明

+

匹配一个或多个先前的字符。eg: ’[a-z]+able’的字符串,匹配“loveable”、“enable”等。

array|banana|cle

匹配‘array’或‘banana’或‘cle’。以单词为单位或。

fgrep:

       该命令行语法格式和grep相似,但是它不识别任何正则表达式元字符,因为它搜索字符串而不是正则表达式的模式。fgrep命令使用快速压缩算法。与grep的-F选项相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值