1. 简介

grep全称Global Regular Expression Print,全局正则表达式打印.

在这里面提到了三个关键词,我们逐个进行分析,这样有助于我们理解

grep这个命令的作用,1.global说明该命令可以用于所有用户(交互式

用户) 2.Regular Expression的作用想必学过基本程序的同学都知道

Regular Expression最大的作用就是按照规则(模式)去查找匹配的一

段字符串,至于如何按照规则这是后面 3.Print 按照规则搜索的的字

符串当然要打印出来了,不然这是在瞎耽误功夫

综合而论,在多个用户模式下,根据规则搜索查找想要的文本片段,将

其标准输出在交互行(当然可以重定向输出)

2. 语法

Usage:grep [OPTION]... PATTERN [FILE]...

eg:[root@CentOS ~]# grep -e "^root" /etc/passwd

root:x:0:0:root:/root:/bin/bash

dd if=/dev/zero of=/dev/sdb bs=1M count=612

returnVal=$?

if [ $returnVal -eq 0 ]; then

echo -e 'n\np\n1\n \n+100M\nn\np\n2\n \n+512M\nw' | fdisk

/dev/sdb &> /dev/null

fi

(a)基本程序信息

'--help' 帮助信息

eg:grep --help

'-V'

'--version' 程序版本信息及版权信息[root@CentOS ~]# grep -V

GNU grep 2.6.3

Copyright (C) 2009 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

(b) 匹配控制选项

'-e pattern'   默认选项,表明grep工具使用正则匹配规则搜索数据

eg:[root@CentOS ~]# grep -e "/bin/bash" /etc/passwd

root:x:0:0:root:/root:/bin/bash

'-i' 忽略匹配的大小写结果

eg:[root@CentOS test]# grep -i "ssh" /etc/passwd

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

'-v' 将匹配结果反转

eg:[root@CentOS test]# grep -iv "ssh" /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

...

'-w' 单词匹配(行中只要出现该匹配信息即可返回结果)

eg:# 示例程序

cpuid level :13

wp : yes

wp

wpp

flags[root@CentOS test]# grep -w "wp" b.txt

wp : yes

wp

'-x' 行匹配(行中只出现该匹配信息才返回信息)

eg:[root@CentOS test]# grep -x "wp" b.txt

wp

(c) 通用输出选项

'-c' 匹配正则表达式成功次数

eg:[root@CentOS test]# grep -c 'root' /etc/passwd

2

'--color' 匹配结果高亮标识 {never | always | auto}

eg:grep --color=auto 'root' /etc/passwd

'-m #' 匹配返回次数

eg:[root@CentOS test]# grep -m 1 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

[root@CentOS test]# grep -m 2 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

'-o' 匹配正则表达式所匹配的内容(grep默认情况返回匹配数据的所在行)

eg:[root@CentOS test]# grep 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]# grep -o 'root' /etc/passwd

root

root

root

root

'-q' 安静模式,匹配内容没有任何输出

eg:[root@CentOS test]# grep 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]# grep -q 'root' /etc/passwd

[root@CentOS test]#

(d) 输出行前缀选项

'-b' 字节偏移打印(需要注意该标识只是每行块首的位置)

eg:[root@CentOS test]# grep 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]# grep -b 'root' /etc/passwd

0:root:x:0:0:root:/root:/bin/bash

388:operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]#

'-H' 匹配内容所在文件前缀显示(多文件自动开启)

eg:[root@CentOS test]# grep 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]# grep -H 'root' /etc/passwd

/etc/passwd:root:x:0:0:root:/root:/bin/bash

/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]# grep 'root' /etc/passwd ./a.txt

/etc/passwd:root:x:0:0:root:/root:/bin/bash

/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin

./a.txt:root:x:0:0:root:/root:/bin/bash

./a.txt:operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]#

'-n' 匹配内容所在文件的行号

eg:[root@CentOS test]# grep 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]# grep -n 'root' /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

11:operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]#

'-T' 对齐前缀内容,更加美观方便识别

eg:[root@CentOS test]# grep -bnH 'root' /etc/passwd

/etc/passwd:1:0:root:x:0:0:root:/root:/bin/bash

/etc/passwd:11:388:operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]# grep -bnHT 'root' /etc/passwd

/etc/passwd: 1: 0:root:x:0:0:root:/root:/bin/bash

/etc/passwd: 11: 388:operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]#

'-l' 只输出匹配内容所在的文件名(多文件查找,只需要知道存在性时)

eg:[root@CentOS test]# grep 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]# grep -l 'root' /etc/passwd ./a.txt ./b.txt

/etc/passwd

./a.txt

[root@CentOS test]#

'-L' 输出不匹配内容的文名(一般情况下linux参数大小写都是获取相反的结果)

eg:[root@CentOS test]# grep -l 'root' /etc/passwd ./a.txt ./b.txt

/etc/passwd

./a.txt

[root@CentOS test]# grep -L 'root' /etc/passwd ./a.txt ./b.txt

./b.txt

[root@CentOS test]#

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

eg:[root@CentOS test]# grep 'root' /etc/passwd1

grep: /etc/passwd1: No such file or directory

[root@CentOS test]# grep -s 'root' /etc/passwd1

[root@CentOS test]#

(e) 内容行选项

'-A #' 匹配内容的之后#行信息

eg:[root@CentOS test]# grep -A 1 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

--

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

[root@CentOS test]#

'-B #' 匹配内容的之前#行信息(第一个匹配项就是第一行)

eg:[root@CentOS test]# grep -B 2 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

--

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

[root@CentOS test]#

'-C #' 匹配内容的前后各#行信息

eg:[root@CentOS test]# grep -C 1 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

--

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

[root@CentOS test]#

'--group-separator=string' 当使用到-A,-B,-C时中间可能出现内容分割符,此命令可以替

换中间默认的'--'的分隔符

eg:[root@CentOS test]# grep -C 1 --group-separator=### 'root'

/etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

###

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

[root@CentOS test]#

'--no-group-separator' 不显示分隔符,这个就不示例了 :)

(f) 文件及文件夹选项

'-a' 如果需要操作的文件是二进制文件,此命令会将理论可能转换的文字进行匹配

eg:[root@CentOS ~]# grep "file" /bin/grep

Binary file /bin/grep matches

[root@CentOS ~]# grep -a "file" /bin/grep

write error(standard input)lseek failedBinary file %s matches

/usr/share/localeGREP_OPTIONSreadskipunknown devices methodrecurseunknown directories methodinvalid max countbinaryunknown binary-files typeyesforcenevernononeautoif-ttyTERMdumbGREP_COLORGREP_COLORSGNU grep 2.6.3%s

'-r' 如果指定查找对象是一个目录,那么需要使用递归完成所有文件匹配

eg:[root@CentOS ~]# grep "file" ./test

[root@CentOS ~]# grep -r "file" ./test

Binary file ./test/grep matches

./test/a.txt:custom file

./test/a.txt:file custom

[root@CentOS ~]#

'-D' 如果查找的文件中包括设备输入输出,套接字文件的时候,可以选择其他操作{read,

skip},当然如果使用-r或-R遍历时此选项没有效果

'-d' 如果查找的文件是一个目录时,也可以选择其他操作{read,skip}

(g) 其他选项

'--line-buffered' 输出时使用缓存区,这样的好处不言而明 :)

3. grep正则表达式字符集

grep在查询与搜索内容时是支持正则表达式的,很难想象有哪一种操作系统或开发语言

不支持它的,不论是IT运维还是程序员都需要掌握的一种基本技能.当然如果系统管理员

掌握这些之后,可以非常方便的对于系统进行管理与操作,综上所述,学好正则表达式是

学好grep命令的重中之重.接下来我们先接触基本的匹配字符集,由简到繁

(a) 基本集

'.' 匹配一个非换行符的字符 如: gr. => grr | gr

'?' 匹配次数有1次或0次 如: gr? => gr | g

'*' 匹配次数任意次数 如: gr* => grrrrrr | g | gr

'+' 匹配次数至少1次 如: gr+ => gr | grrr

'{n}' 匹配多少次(确定) 如 gr{2} => grrr

'{n,}' 匹配至少n次以上 如 gr{2,} => grrr | grrrrr

'{,m}' 匹配至多m次以内 如 gr{,2} => g | grr

'{n,m}' 匹配次数在n到m次之间 如gr{2,3} => grrr | grrrr

(b) 元字符集(基于POSIX,在使用时需要加入[])

'[:alnum:]' 匹配数字和字符中的一个 例 [0-9A-Za-z]

'[:alpha:]' 匹配基本字符串 例 [A-Za-z]

'[:black:]' 匹配一个制表符和空格符,tab,space键所产生的空格

'[:digit:]' 匹配一个数字 例 [0-9]

'[:punct:]' 匹配一个在半角状态下符号 例 [!"#$%&()*+,-./:;<=>?@[\]^_'{|}~`]

'[:graph:]' 匹配一个[:punct:]和[:alnum:]中的任意一个字符

'[:space:]' 匹配一个space空格字符

'[:print:]' 匹配一个[:punct:]和[:alnum:]和[:space:]中一个字符

'[:lower:]' 匹配一个[a-z]中的任意一个字符

'[:upper:]' 匹配一个[A-Z]中的任意一个字符

'[:xdigit:]' 匹配一个[0-9a-fA-F]中的任一个字符

(c) 特殊表达式

'\b' 匹配字符串时进行完全限定 例: word\b => word 而不限定的话 wor. => work

'\

'\>' 匹配字符串是进行右边限定  例 \bword\b

=> \

'\w' 匹配[:alnum:]中外加'_'的任意一个字符

'\s' 匹配[:space:]匹配空格字符串

'()' 将匹配规则看作一个整体出现,不可分割

例 ab*(cc)d* => acc | abccd | abbcc | accdddd

'|'  将匹配规则或处理,注意或者包括前后整体 ab|cd => ab | cd

(4) 锚标记

'^' 行首锚定也代表正则匹配规则开始 例 ^g... => geek | gank

'$' 行尾锚定也代表正则匹配规则结束 例 ...k$ => seek | work

(5) 后项引用

'\n' 与小括号联用,如果当前规则中出现小括号,则在后续的规则中可以进行引用替换,替换

的值需要完全匹配 例 (g..k)\1 => geekgeek | geakgeak

4. 实战

(a) QQ号码^[1-9]*[1-9][0-9]*$

解析 : QQ号码的开头(^)不能是0,所以是[1-9],[1-9]的可以是任意位*,允许有1位数的QQ

当然你也可以限定QQ号码的位数^[1-9][[:digit:]]{5-14}$

(b) URL地址^http[s]\?:\/\/\([[:alnum:]-]{1,}\.\){1,}[[:alnum:]-]{1,}\([[:alnum:]-./?%&=]*\)\?$

# http://www.baidu.com

# http://51buy.com

解析 : URL可以由http或者https开头,并且s是可选的,接下来//,斜线需要转义,所以出现了

\/\/.然后是任意字母字符可以加-,但必须有1位,所以{1,},接下来出现.号,期间重复出现,

最后可以出现.?=&这些符号,通常是网页参数https://blog.51cto.com/user_index.php?action=addblog_new&job=modify&tid=1360494

(c) IP地址\(25[0-5]\|2[0-4][[:digit:]]\|[1][[:digit:]]\{2\}\|[1-9]\?[[:digit:]]\)\.

\(25[0-5]\|2[0-4][[:digit:]]\|[1][[:digit:]]\{2\}\|[1-9]\?[[:digit:]]\)\.

\(25[0-5]\|2[0-4][[:digit:]]\|[1][[:digit:]]\{2\}\|[1-9]\?[[:digit:]]\)\.

\(25[0-5]\|2[0-4][[:digit:]]\|[1][[:digit:]]\{2\}\|[1-9]\?[[:digit:]]\)

127.0.0.1

255.255.255.0

解析 : 猛然一看,可能这个比较难,当我们仔细观察会发现很多都是重复内容,ip地址的匹配

由高位到低位开始,我们先来转换一下这个正则,25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-

9][0-9]|[0-9],这段的意思是说如果ip地址是25开头的3位数字的话,地址可以是250,251,252

253,254,255,接下来就是2开头的其他三位数的匹配,范围可以是2[0-4][0-9],需要注意它们

之间的关系是或者,那么25[0-5]\|2[0-4][[:digit:]]这段我们就可以把200-255这段

ip地址列完,接下来的事情就是在1开头的三位数与二位数继续判断.

linux grep 多个文件,Linux多文件查找工具之grep相关推荐

  1. linux 删除所有a字符串,linux文本处理三剑客(grep、sed、akw)命令选项整理

    摘要:Linux中最重要的三个命令:awk,sed,grep,在业界被称为"三剑客". 1.grep和egrep(过滤器) grep: grep [选项][匹配条件][file1 ...

  2. Linux学习命令汇总三——Linux用户组管理,文件权限管理,文本搜索命令grep及正则表达式...

    本章Blog相关Linux知识点 解析:在数据库按搜索码查找相对应的条目,并找与之对应额外的其他数据库的过程:名称解析:UID ,组名解析:GID 数据库:文本文件,sql数据库,ldap数据库,用户 ...

  3. linux下的find文件查找命令与grep文件内容查找命令(转)

    在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区别的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空, ...

  4. (转载)linux下的find文件查找命令与grep文件内容查找命令

    linux下的find文件查找命令与grep文件内容查找命令 转载于和感谢:linux下的find文件查找命令与grep文件内容查找命令 目录 1.前言 1.1 find命令和grep命令的区别 2. ...

  5. Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置

    Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置 grep [选项]... PATTERN [FILE]... grep -C N,(N代表一个整数)是搜索关键字出现位置,并且 ...

  6. Linux文件处理命令 file、mkdir、grep、dd、mv、diff

     file 1.  作用 file通过探测文件内容判断文件类型,使用权限是所有用户. 2.  格式 file [options]  文件名 3.  [options]  主要参数 -v:   在标准输 ...

  7. linux grep -r 查询相关名字的文件以及ps指令

    参考:https://zhuanlan.zhihu.com/p/65515740 grep命令简介 grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep家族 ...

  8. linux下的find文件查找命令与grep文件内容查找命令

    在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访 ...

  9. 【Linux基础】四、常用基本命令——文件权限类(ls -al,chmod,chown,chgrp)、搜索查找类(find,locate,grep,wc,which)

    文件权限命令.搜索查找命令 4.6 ```文件权限类``` 4.6.1 文件属性 4.6.2 chmod 改变权限 4.6.3 chown 改变所有者 4.6.4 chgrp 改变所属组 ```4.7 ...

最新文章

  1. Ubuntu 16.04安装Java JDK
  2. 扫描PDF417崩溃的原因找到:手机摄像头分辨率低
  3. 【英语学习】【English L06】U07 Jobs L5 Work overtime
  4. 关于深圳城中村小产权房,你应该知道的
  5. K8S_Google工作笔记0011---通过二进制方式_为APIServer生成自签证书
  6. 送给测试行业年轻人们的一些建议
  7. Lucene: 全文检索的基本原理
  8. 强化学习 马尔可夫决策过程(MDP)是什么
  9. 设置Response中的ContentType
  10. word转pdf转换器11.0注册码
  11. 新的网络架构按下“快进键” 快步走入互联网下半场
  12. 利用python做微信公众号标题的词云图
  13. 怎么在计算机里找到CF里保存的视频,cf录像保存在哪?cf怎么样录像保存方法
  14. 1.1.2 Linux epoll详解
  15. 【STM32F429的DSP教程】第2章 Matlab R2018a的安装
  16. 亚马逊云服务器是干嘛用的,亚马逊云服务器免费12月套餐及使用步骤
  17. java 节日_java节假日
  18. Android实现手写板和涂鸦功能
  19. 光伏混合储能直流微电网simulink仿真,超级电容仿真模型,蓄电池模型仿真,有双向dcdc电路
  20. RSA非对称加密核心算法

热门文章

  1. canvas实现分散对齐
  2. 打印一只Nyan Cat(彩虹猫)(C++)2.0[变色版]
  3. 伦敦银,基本面投资分析技巧
  4. linux 下安装erlang
  5. 你真的了解java吗?java总结六
  6. 程序员这样优化简历 一投制胜
  7. 简单的脚本在linux下将坚果云下同步的文件转移到zotero
  8. 白马培训机构招生管理系统-数据流图(DFD)
  9. paulzhou的数学?TAT? 【二分打表找规律】
  10. 推荐一本好书《Spring实战(第四版)》