注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

朝程序员的博客

与朋友交流计算机网络知识

 
 
 

日志

 
 

grep命令 正则表达式  

2016-09-28 17:29:04|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
grep
1.1   grep 查找文本内容

grep命令的一般形式为:

grep [命令选项]... 用于匹配的表达式 [文件]...

[options]主要参数:

-c:只输出匹配行的计数。                              ps -ef|grep -c svn
-i:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。


[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示

实例:

将/etc/passwd,有出现 root 的行取出来

# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
或
# cat /etc/passwd | grep root 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root 的行取出来,同时显示这些行在/etc/passwd的行号
# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
30:operator:x:11:0:operator:/root:/sbin/nologin

从多个文件中查找关键词

           grep 'root' test.txt test2.txt

关键字所在行的前两行与后三行一起显示

     grep -n -A3 -B2 root /etc/passwd

颜色标注搜索关键词

     grep -n --color=auto 'root' /etc/passwd
显示包含ed或者at字符的内容行
     grep -E  "ed|at"


在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。 这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=auto 又显的很麻烦~ 用 alias 就得来处理一下! 在 ~/.bashrc 内加上这行: alias grep='grep --color=auto' 再以 source ~/.bashrc 来立即生效 这样每次运行 grep 他都会自动帮你加上颜色显示啦

  1.2 grep 正则 grep -n 't[ae]st' 123.txt #查找包含tast 和 test 的行 grep -n '[^g]oo' 123.txt #查找oo前不是g字符串 所在的行 grep -n '[^a-z]oo' 123.txt #查找oo前不是“小写字母”字符串 所在的行 grep -n '[0-9]' 123.txt #查找 包含数字0到9 的行 ^ 符号,在字符类符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』 在 [] 之外则代表定位在行首的意义!

grep '^the' 123.txt #查找 the开头 的行 grep ^u 123.txt  #找出已u开头的行内容  或者 cat 123.txt |grep ^u     grep ^[^u] 123.txt #输出非u开头的行内容 或者 cat 123.txt |grep ^[^u]  或 grep -v ^u 123.txt


 grep hat$ 123.txt                   #找出已hat结尾的行         grep -v hat$ test.txt               # 输出不是hat结尾的行内容                  grep '\.$' #找出以 . 结尾的行 (.有特殊含义 要用转义字符 ) grep '^$' #找出 空白行(只有行首和行尾

重复匹配:
任意一个字节 .    
重复字节 *

这两个符号在正则表达式的意义如下:

. (小数点):代表『一定有一个任意字节』的意思;
* (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态

grep -n 'g..d'                   找出 g??d 的字串
grep -n ' ooo*'                找出ooo、oooo、oooooo…… 等的字符串所在
grep -n 'g.*g'                   找出g开头 g结结尾的字符串所在行(中间无所谓)
grep -n 'go\{2,5\}g'         找出两个g中间包含 2到5个o的字符串所在行

1.3 grep 查找内容 搜索文件 根据文件内容递归查找目录

# grep ‘ener’ *     #在当前目录搜索带'ener'行的文件  显示关键字所在行

# grep -r ‘ener’ *  #在当前目录及其子目录下搜索'ener'行的文件  显示关键字所在行
# grep -l -r ‘energywise’ *     #在当前目录及其子目录下搜索'energywise'行的文件,
                                  但是不显示匹配的行,只显示匹配的文件
 #    grep abc *.txt                                当前目录下所有txt文件中 带有abc的行
      这几个命令很使用,是查找文件的利器。


  评论这张
 
阅读(2)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018