基本介绍

  Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

  grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

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

表达式

grep [option] pattern file     注意:后面可以跟多个file

参数介绍

  • -a 不要忽略二进制数据。
  • -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
  • -b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
  • -c 计算符合范本样式的列数。
  • -C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
  • -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
  • -e<范本样式> 指定字符串作为查找文件内容的范本样式。
  • -E 将范本样式为延伸的普通表示法来使用,意味着能使用扩展正则表达式。
  • -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
  • -F 将范本样式视为固定字符串的列表。
  • -G 将范本样式视为普通的表示法来使用。
  • -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称(不显示匹配到的文件名)。
  • -H 在显示符合范本样式的那一列之前,标示该列的文件名称。
  • -i 胡列字符大小写的差别。
  • -l 列出文件内容符合指定的范本样式的文件名称。
  • -L 列出文件内容不符合指定的范本样式的文件名称。
  • -n 在显示符合范本样式的那一列之前,标示出行号。
  • -q 不显示任何信息。
  • -R/-r 此参数的效果和指定“-d recurse”参数相同。
  • -s 不显示错误信息。
  • -v 反转查找,也就是显示没有匹配行。
  • -w 只显示全字符合的列。
  • -x 只显示全列符合的列。
  • -y 此参数效果跟“-i”相同。
  • -o 只输出文件中匹配到的部分。
  • --color=auto :可以将找到的关键词部分加上颜色的显示喔!

规则表达式:

  • grep的规则表达式:
  • ^  #锚定行的开始 如:'^grep'匹配所有以grep开头的行。
  • $  #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
  • .  #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
  • *  #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
  • .*   #一起用代表任意字符。
  • []   #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
  • [^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
  • \(..\)  #标记匹配字符,如'\(love\)',love被标记为1。
  • \<      #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
  • \>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
  • x\{m\}  #重复字符x,m次,如:'0\{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的反置形式,匹配一个或多个非单词字符,如点号句号等。
  • \b    #单词锁定符,如: '\bgrep\b'只匹配grep。

分类

  • grep:
  • egrep:egrep和grep -e的效果是一样的 ,用于扩展正则表达式
  • fgrep:就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊

基本使用

示例:

[root@localhost test]# cat test.txt
hnlinux
peida.cnblogs.com
ubuntu
ubuntu linux
redhat
Redhat
linuxmint
[root@localhost test]# cat test2.txt
linux
Redhat
  • 从文件中读取关键词进行搜索

    命令:cat test.txt | grep -f test2.txt test3.txt

   说明:输出test.txt文件中含有从test2.txt和test3.txt文件中读取出的关键词的内容行

  • 从文件中读取关键词进行搜索 且显示行号

   命令:cat test.txt | grep -nf test2.txt

    说明:输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行,并显示每一行的行号

  • 从多个文件中查找包含指定关键词

    命令:grep 'linux' test.txt test2.txt

  • 从多个文件中查找指定关键词

    命令:grep -w 'linux' test.txt test2.txt

  • 输出非u开头的行内容

    命令:cat test.txt |grep ^[^u]

  • 找出已u开头的行内容

    命令:cat test.txt |grep ^u

  • 输出以hat结尾的行内容

    命令:cat test.txt |grep hat$

  • 过滤ip地址

    命令:ifconfig eth0|grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"

    结果:inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0

    命令:ifconfig eth0|grep -E "([0-9]{1,3}\.){3}[0-9]"

    结果:inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0

  • 显示包含ed或者at字符的内容行

    命令:cat test.txt |grep -E "ed|at"

  • 显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行

    命令:grep '[a-z]\{7\}' *.txt

  • -A 数字N:找到匹配行,并显示后面的N行

    命令:grep -A 2 "a" test.txt

  • -B 数字N:找到匹配行,并显示前面的N行‘

    命令:grep -B 2 "a" test.txt

  • -C 数字N:找到匹配行,并显示前面和后面各N行‘

  命令:grep -C 2 "a" test.txt

  • 显示匹配到的字符在文件中的偏移地址

  命令:grep -b "a" test.txt

  • 显示有多少行被匹配到

  命令:grep -c "a" test.txt

  • -e:可以使用多个正则表达式,多个表达式之间时或的关系

  命令:grep -e "a" -e "1" test.txt

  • -i:不区分大小写

  命令:grep -i "a" test1.txt

  • -m 数字N:最多匹配N个后停止

  命令:grep -m 2 "a" test.txt

  • -n:打印行号

  命令:grep -n -m 2 "a" test.txt

  • -o:会打印匹配到的字符

  命令:grep -n -o "a" test.txt

  • -R:在当前目录和子目录查找字符,如果不加-R默认是在当前目录下查找

  命令:grep -R "a" *

  • -v:显示不包括查找字符的所有行

  命令:grep -v "a" test.txt

  • 现在想把abc或okm筛选出来

  命令:grep "abc\|okm" test.txt

  • 把出现abc整个单词筛选出来,不区分大小写

  命令:grep -wi "abc" test.txt

  • 查出至少包含1,2,3,a,b其中一个的行

  命令:grep -n --color '[1-3 a-b]' test.txt

  • 任意字符开头然后第二个字符为 ‘3’

  命令:grep -n --color  '^.3' test.txt

  • 匹配前面的字符0 次或者 多次,包括空白行也会匹配出来

  命令:grep -n --color '3\?' test.txt

  • 匹配字符串”33”但是 第二个字符‘3’只能匹配0次或者1次,因此实际匹配到的字符有“33 ”和 ‘3’这两种

  命令:grep -n --color '33\?' test.txt

  • \+:匹配前面的字符1次或者多次

  命令:grep -n --color '3\+' test.txt

  • x\{m\}:匹配字符X m次 。x\{m,\}:匹配字符X 最少m次。x\{m,n\}:匹配字符X至少m次最多n次

  命令:grep -n --color '3\{0,1\}' test.txt

  • \|:表示或的关系

  命令:grep -n --color 'ab∥23ab‖23' test.txt

  • 显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行

  命令: grep "[Mm]ay" test.txt

  • 显示输出第一个字符的范围是“A-D”,第二个字符是“9”,第三个字符的是“D”的所有的行

  命令:grep "[A-Z][9]D" test.txt

  • 显示输出空行的行号

  grep -n "^$" test.txt

  • 如果要查询目录列表中的目录 同:ls -d *

  命令:ls -l |grep "^d"

  • 在一个目录中查询不包含目录的所有文件

  命令:ls -l |grep "^d[d]"

  • 查询其他用户和用户组成员有可执行权限的目录集合

  命令:ls -l |grpe "^d…..x..x"

  • -e和-E用法的异同

  命令:grep -e '2|3' test.txt和grep -E '2|3' test.txt和grep -e '2' -e '3' test.txt都是等价的

  说明:上面三种命令都是表示或的关系,即,2和3至少包含一个就是符合条件的,但是grep -E 'b' -E 'd' test2.txt test1.txt这种写法中’d‘是不生效的,并且会报:grep: d: No such file or directory

  • 同时满足多个条件的方法

  命令:cat test.txt |grep '2' |grep '3'

  说明:此命令表示必须同时包含2和3才算符合条件

zgrep命令

  • 在查看压缩文件(以tar.gz结尾)时

  命令:zgrep -a -A10 '19060222332049555917' za-telecom-cashloan-mics-20190602-10.253.*

  • 查询一段时间内的日志:

  命令:zgrep -a 'repayTrialByPeriods' za-telecom-cashloan-mics-20190604-10.253.*|grep -E '2019-06-04 2[3-4]' |grep '查无相应的还款计划,或者已结清'

  

Linux之grep的使用的更多相关文章

  1. 由一条Linux的grep命令说起

    今天在开发的时候,看到同事使用了这样的一条linux命令 grep 'class YourClass' -rwi * |grep -v svn 想到了 grep命令的,几个参数. -r 明确要求搜索子 ...

  2. Linux下grep显示前后几行信息

    Linux下grep显示前后几行信息 标准unix/linux下的grep通过下面參数控制上下文 grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行grep -B ...

  3. linux 命令grep

    linux 命令grep grep命令用来搜索文本,或从给定的文件中搜索行内包含了给定字符串或单词的文件.通常来说,grep显示匹配的行.使用grep来搜索包括一个或多个正则表达式匹配到的文本行,然后 ...

  4. Linux 命令 - grep: 正则搜索文本

    grep 搜索文本文件中与指定正则表达式匹配的行 命令格式 grep [OPTIONS] PATTERN [FILE...] 命令参数 Generic Program Information --he ...

  5. linux 用grep匹配横线

    file的内容如下: ADSFADSFSDFASDFJKJK----------------------------------------ADSFADSFSDFASDFJKJK----------- ...

  6. Linux正则表达式grep与egrep

    grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...

  7. 12个 Linux 中 grep 命令的超级用法实例

    12个 Linux 中 grep 命令的超级用法实例 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一 ...

  8. Linux中Grep常用的15个例子【转】

    转自:https://www.aliyun.com/jiaocheng/1390860.html?spm=5176.100033.1.9.6a1e41e8Pdjynm 摘要:Grep命令主要用于从文件 ...

  9. 【linux】linux命令grep + awk 详解

    linux命令grep  +  awk 详解 grep:https://www.cnblogs.com/flyor/p/6411140.html awk:https://www.cnblogs.com ...

  10. linux中grep命令的使用

    转载:http://blog.csdn.net/universsky/article/details/8866402 linux中grep命令的使用 grep (global search regul ...

随机推荐

  1. BOOST 线程完全攻略

    1 创建线程 首先看看boost::thread的构造函数吧,boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象: (2)explicit thre ...

  2. 【C#】C#线程_基元线程的同步构造

    目录结构: contents structure [+] 简介 为什么需要使用线程同步 线程同步的缺点 基元线程同步 什么是基元线程 基元用户模式构造和内核模式构造的比较 用户模式构造 易变构造(Vo ...

  3. MKMapView:确定区域更改是否来自用户交互

    参见: http://www.b2cloud.com.au/tutorial/mkmapview-determining-whether-region-change-is-from-user-inte ...

  4. vscode: Visual Studio Code 常用快捷键1

    ctrl + pAlt + shift 多行编辑

  5. mybatis generator生成文件大小写问题

    mybatis generator插件中,如果 mysql数据表中的字段是用下划线划分的(个人一般都是喜欢这么创建表的字段,如:company_name),那么生成的Vo中会自动对应为companyN ...

  6. windows上RSA密钥生成和使用

    一,下载安装windows平台openssl密钥生成工具,执行安装目录bin下的"openssl.exe",执行后弹出命令窗口如下 运行 二,生成私钥 输入"genrsa ...

  7. 电子商务(电销)平台中订单模块(Order)数据库设计明细(转)

    以下是自己在电子商务系统设计中的订单模块的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 订单表 (order)|-- 自动编号(order_id, 自增长主键)|-- 订单单号( ...

  8. 一对一voip,直播连麦,在线会议,兼容webrtc,IM音视频

    功能 IM消息系统 一对一 高清音视频实时通信,可无缝切换P2P传输,节省服务器带宽 一对多互动直播 多对多在线会议 手机实时录屏传输 高度定制化 网络检测,动态码率与动态帧率,抗网络抖动,微信级效果 ...

  9. C语言socket编程

    建议先去看一下思路 真的写的很不错呦~ 思路参考博客:https://www.cnblogs.com/renfanzi/p/5713054.html linux c语言socket编程代码(单一服务端 ...

  10. PHP下载远程图片的3个方法

    From: http://blog.csdn.net/iefreer/article/details/46930239 直接上代码 <?php function dlfile1($file_ur ...