基本介绍

  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. --defaults-file 不能用?

    今天在测试mysql多实例时发现mysqld_safe --user --defaults-file 怎么都无法启动,后来发现是必须按顺序,先写--defaults-file才可以. mysqld_s ...

  2. Docker入门 - 002 Docker 的简单操作

    系统要求:CentOS 7.2 64 位操作系统. Docker 的简单操作 下载镜像 下载一个官方的 CentOS 镜像到本地 docker pull centos 下载好的镜像就会出现在镜像列表里 ...

  3. MySql 三大知识点——索引、锁、事务

    1. 索引 索引,类似书籍的目录,可以根据目录的某个页码立即找到对应的内容. 索引的优点:1. 天生排序.2. 快速查找.索引的缺点:1. 占用空间.2. 降低更新表的速度. 注意点:小表使用全表扫描 ...

  4. vue2.0引入现有css文件

    1.在vue文件中的<style>内填写需要引用的文件 如: @import "./css/indexTest.css";

  5. Ubuntu安装cuda

    到官网选择对应的cuda版本.cuda跟显卡的驱动是有个依赖关系的.参见这篇博客 然后按照提示,运行按照程序 sudo sh cuda_10..130_410.48_linux.run 然后安装完成后 ...

  6. python模块import具体用法

    同级目录 import 文件名 form 文件名 import * 子目录 import 目录名.文件名 form 目录名.文件名 import * 不同目录 先导入sys包,然后把对应的目录加入pa ...

  7. 【GMT43智能液晶模块】例程十二:SDIO实验——读取SD卡信息

    实验原理: STM32F429上带有SDIO控制器,GMT43液晶模块上将SDIO连接到TF卡座上.本 实验将Micro SD卡插入TF卡座上即可.SD卡中可存放液晶显示模块需要显示的图片.字 库等资 ...

  8. 【转】Flask入门之上传文件到服务器

    #Sample.py # coding:utf-8 from flask import Flask,render_template,request,redirect,url_for from werk ...

  9. mysql 批量导入 Packets larger than max_allowed_packet are not allowed

    解决方法  :http://blog.csdn.net/gtosky4u/article/details/8581281

  10. Linux 正则表达式_010

    Linux 正则表达式 标注:本教程只针对linux运维的三剑客命令awk,sed,grep正则表达式 什么是正则表达式? 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法通过定义的这 ...