设为首页 收藏本站
查看: 982|回复: 0

[经验分享] linux grep命令总结

[复制链接]

尚未签到

发表于 2018-5-18 08:39:20 | 显示全部楼层 |阅读模式
linux grep命令总结

  简介
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep常用用法
  [root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
  选项与参数:
  -a :将 binary 文件以 text 文件的方式搜寻数据
  -c :计算找到 '搜寻字符串' 的次数
  -i :忽略大小写的不同,所以大小写视为相同
  -n :顺便输出行号
  -s 不显示错误信息
-E 使用扩展正则表达式

  -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
  --color=auto :可以将找到的关键词部分加上颜色的显示喔!
  pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。

  \< 和 \> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’,
grep ‘\<man\>’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。

  将/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
  可以使用国际模式匹配的类名:
  [[:upper:]]   [A-Z]
[[:lower:]]   [a-z]
[[:digit:]]   [0-9]
[[:alnum:]]   [0-9a-zA-Z]
[[:space:]]   空格或tab
[[:alpha:]]   [a-zA-Z]

  
grep正则表达式元字符集(基本集)
^  锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$  锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
.   匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
*  匹配零个或多个先前字符 如:' *grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]  匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。
\(..\)  标记匹配字符,如:'\(love\)',love被标记为1。
\<  锚定单词的开始,如:'\<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的行。
\w  匹配一个文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W  w的反置形式,匹配一个非单词字符,如点号句号等。\W*则可匹配多个。
\b  单词锁定符,如: '\bgrep\b'只匹配grep,即只能是grep这个单词,两边均为空格。
find与xargs
find . -type f -print | xargs file 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
find / -name "core" -print | xargs echo "" >/tmp/core.log 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
find . -type f -print | xargs grep "hostname" 用grep命令在所有的普通文件中搜索hostname这个词
find ./ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西 (find . -ctime +3 -exec rm -rf {} \;)
find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件
find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
find命令的常用选项及实例
  -name
  按照文件名查找文件。
find /dir -name filename  在/dir目录及其子目录下面查找名字为filename的文件
find . -name "*.c" 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件
  -perm
按照文件权限来查找文件。
find . -perm 755 –print 在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件
  -prune
使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
find /apps -path "/apps/bin" -prune -o –print 在/apps目录下查找文件,但不希望在/apps/bin目录下查找
find /usr/sam -path "/usr/sam/dir1" -prune -o –print 在/usr/sam目录下查找不在dir1子目录之内的所有文件
  -user
按照文件属主来查找文件。
find ~ -user sam –print 在$HOME目录中查找文件属主为sam的文件
  -group
按照文件所属的组来查找文件。
find /apps -group gem –print 在/apps目录下查找属于gem用户组的文件
  -mtime -n +n
按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。
find / -mtime -5 –print 在系统根目录下查找更改时间在5日以内的文件
find /var/adm -mtime +3 –print 在/var/adm目录下查找更改时间在3日以前的文件
  -nogroup
查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
find / –nogroup -print
  -nouser
查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
find /home -nouser –print
  -newer file1 ! file2
查找更改时间比文件file1新但比文件file2旧的文件。
  -type
查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
find /etc -type d –print 在/etc目录下查找所有的目录
find . ! -type d –print 在当前目录下查找除目录以外的所有类型的文件
find /etc -type l –print 在/etc目录下查找所有的符号链接文件
  -size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
find . -size +1000000c –print 在当前目录下查找文件长度大于1 M字节的文件
find /home/apache -size 100c –print 在/home/apache目录下查找文件长度恰好为100字节的文件
find . -size +10 –print 在当前目录下查找长度超过10块的文件(一块等于512字节)
  -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
find / -name "CON.FILE" -depth –print 它将首先匹配所有的文件然后再进入子目录中查找
  -mount:在查找文件时不跨越文件系统mount点。  
find . -name "*.XC" -mount –print 从当前目录开始查找位于本文件系统中文件名以XC结尾的文件(不进入其他文件系统)
  -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
  
  将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号
# grep -n root /etc/passwd
3:root:x:0:0:root:/root:/bin/bash
5:operator:x:11:0:operator:/root:/sbin/nologin  grep 可以使用 --color=auto 来将关键字部分使用颜色显示。你可以在 ~/.bashrc 内加上这行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』来立即生效。
  将/etc/passwd,将root行过滤掉,不出现带有root字符的行。
[root@www script]# grep -v root /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
将带有root的字符已经过滤掉了。  将/etc/passwd中,过滤掉root 和nologin,不出现带有root 和nologin字符的行。
[root@www script]# grep -v root /etc/passwd|grep -v nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
将带有root 和nologin的字已经过滤掉了。  根据文件内容递归查找目录
  # grep ‘mysql’ *           #在当前目录搜索带'energywise'行的文件
# grep -r ‘mysql’ *        #在当前目录及其子目录下搜索'energywise'行的文件# grep -l -r ‘mysql’ *     #在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件  grep与正规表达式

  [root@www script]# grep "google\>" regular.txt
  .google is the best tools for search keyword.
  [root@www script]# grep "\<google" regular.txt  
  .google is the best tools for search keyword.
  [root@www script]# grep "\<goog" regular.txt   
  .google is the best tools for search keyword.
  [root@www script]# grep "\<goo" regular.txt              模糊匹配关键字
  Oh! The soup taste good.
  .google is the best tools for search keyword.
  gooogle yes!
  [root@www script]# grep "goo\>" regular.txt              没有匹配到关键字
  [root@www script]# grep "google\>" regular.txt
  .google is the best tools for search keyword.
  [root@www script]# grep "\<google\>" regular.txt      精确匹配关键字
  .google is the best tools for search keyword.
  [root@www script]# grep "\<google" regular.txt         精确匹配关键字
  .google is the best tools for search keyword.
  [root@www script]# grep "google" regular.txt             精确匹配关键字
  .google is the best tools for search keyword.
  
  [root@www script]# grep "\<[Gg]oogle" regular.txt   
  google is the best tools for search keyword.
  Google is the best tools for search keyword.
  

  字符类
  字符类的搜索:如果我想要搜寻 test 或 taste 这两个单字时,可以发现到,其实她们有共通的 't?st' 存在~这个时候,我可以这样来搜寻:
  [root@www ~]# grep -n 't[ae]st' regular.txt
  5:I can't finish the test.
  7:Oh! The soup taste good.

  字符类的反向选择 [^] :如果想要搜索到有 oo 的行,但不想要 oo 前面有 g,如下
  [root@www ~]# grep -n '[^g]oo' regular.txt
  2:apple is my favorite food.
  3:Football game is not use feet only.
  9:google is the best tools for search keyword.
  11:goooooogle yes!

  第 2,3 行没有疑问,因为 foo 与 Foo 均可被接受,但是第 9 行明明有 google 的 goo 啊,别忘记了,因为该行后面出现了 tool 的 too 啊!所以该行也被列出来,也就是说, 9 行里面虽然出现了我们所不要的项目 (goo) 但是由於有需要的项目 (too) , 因此是符合字串搜寻的。
  至于第 11 行,同样的,因为 goooooogle 里面的 oo 前面可能是 o ,例如: go(ooo)oogle ,所以,这一行也是符合需求的。
  假设我 oo 前面不想要有小写字母,所以我可以这样写 [^abcd....z]oo,但是这样并不方便,由于小写字母的 ASCII 上编码的顺序是连续的, 因此,我们可以这样来写:
  [root@www ~]# grep -n '[^a-z]oo' regular.txt
  3:Football game is not use feet only.
  如果该字节组是连续的,例如大写英文/小写英文/数字等等, 就可以使用[a-z],[A-Z],[0-9]等方式来书写,那么如果我们的要求字串是数字与英文呢? 就将他全部写在一起,变成:[a-zA-Z0-9]。
  我们要取得有数字的那一行,就这样:
[root@www ~]# grep -n '[0-9]' regular.txt
5:However, this dress is about $ 3183 dollars.
8:You are the best is mean you are the no. 1.  行首与行尾字节 ^ $
行首字符:如果我想要让 the 只在行首列出呢? 这个时候就得要使用定位字节了!我们可以这样做:
[root@www ~]# grep -n '^the' regular_express.txt
12:the symbol '*' is represented as start.  如果我不想要开头是英文字母,则可以是这样:
[root@www ~]# grep -n '^[^a-zA-Z]' regular.txt
1:"Open Source" is a good mechanism to develop programs.
11:# I am VBird  注意:因为小数点具有其他意义,所以必须要使用转义字符(\)来加以解除其特殊意义!
  找出空白行:
[root@www ~]# grep -n '^$' regular_express.txt
5:  因为只有行首跟行尾 (^$),所以,这样就可以找出空白行啦!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-461538-1-1.html 上篇帖子: Linux unit 6 下篇帖子: #6 Linux权限的管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表