grep

grep的一般使用

格式:

grep [选项] PATTERN filename filename ...

过滤文件

# grep 'Tom' /etc/passwd
# grep 'bash shell' /etc/test

过滤标准输入或管道

grep 程序的输入可以来自标准输入或管道,而不仅仅是文件,例如:

# grep 'tom'
# ps aux |grep 'sshd'
# ll |grep '^d'
# grep 'alice' /etc/passwd

返回值

找到: grep返回的退出状态为0
没找到: grep返回的退出状态为1

找不到指定文件: grep返回的退出状态为2

grep使用的元字符

grep : 使用基本元字符集 ^, $, ., *, [], [^], \< \>,\(\),\{\}
egrep(或grep -E): 使用扩展元字符集?, +, { }, |, ( )
注:grep也可以使用扩展集中的元字符,仅需要对这些元字符前置一个反斜线

\w 所有字母与数字,称为字符[a-zA-Z0-9] 'l[a-zA-Z0-9]*ve' 'l\w*ve'
\W 所有字母与数字之外的字符,称为非字符 'love[^a-zA-Z0-9]+' 'love\W+'
\b 词边界 '\blove\b' '\<love\>'

元字符

定义:元字符是这样一类字符,它们表达的是不同于字面本身的含义
shell元字符(也称为通配符) 由shell来解析,如rm -rf .pdf,元字符Shell将其解析为任意多个字符
正则表达式元字符 由各种执行模式匹配操作的程序来解析,比如vi、grep、sed、awk

a{n}括号前面的内容重复n次

grep -P 支持扩展的正则表达式

  1. 正则表达式元字符(基本正则表达式元字符):

    字符表示的含义
    ^行首定位符 ^love
    $行尾定位符 love$
    .匹配单个字符 l…e
    *匹配前导符0到多次 ab*love
    []匹配指定范围内的一个字符 [lL]ove
    [ - ]匹配指定范围内的一个字符[a-z]ove
    [^]匹配不在指定组内的字符 [^a-z0-9]ove
    \用来转义元字符 love\.
    \<词首定位符 <love 开头必须为空
    \>词尾定位符 love> 结尾必须为空
    \(..\)匹配稍后将要使用的字符的标签\(love\)able\1er :1,$ s/\(192.168.10\).20/\1.50/g
    \d数字
    x\{m\}字符x重复出现m次o\{5\}
    x\{m,\}字符x重复出现m次以上 o\{5,\}
    x\{m,n\}字符x重复出现m到n次o\{5,10\}
  2. 扩展正则表达式元字符

    +匹配一个或多个前导字符 [a-z]+ove
    ?匹配零个或一个前导字符 lo?ve
    ab
    ()组字符love(able|rs) (ov)+
    (..)(..)\1\2标签匹配字符 (love)able\1er
    x{m}字符x重复m次o{5}
    x{m,}字符x重复至少m次 o{5,}
    x{m,n}字符x重复m到n次 o{5,10}
  3. POSIX字符类:

    表达式含义
    [:alnum:]字母与数字字符[[:alnum:]]+
    [:alpha:]字母字符(包括大小写字母) [[:alpha:]]{4}
    [:blank:]空格与制表符[[:blank:]]*
    [:digit:]数字字母 [[:digit:]]?
    [:lower:]小写字母 [[:lower:]]{5,}
    [:upper:]大写字母[[:upper:]]+
    [:punct:]标点符号 [[:punct:]]
    [:space:]包括换行符,回车等在内的所有空白[[:space:]]+

grep 示例

查找的目标高亮显示

[root@miner-k ~]# grep root --color /etc/passwd

从/etc目录下以passw开头的所有文件中查找root

[root@miner-k ~]# grep 'root' /etc/passw*

查找以root开头的行

[root@miner-k ~]# grep '^root' /etc/passwd

查找以‘4’结尾

[root@miner-k ~]# grep '4$' abc

查找带空格的字段

正确:
[root@miner-k ~]# grep "a user" test

错误: 以下的表达式表示从user、test文件中查找a字段
[root@miner-k ~]# grep a user test

查找image开头但是最后一个字符确认

[root@miner-k ~]# grep "image." test

搜索结果 image.  images  imagee
“.” 表示一个字符

以"i"或者"4"开头

[root@miner-k ~]# grep  -E "^[i4]" test

不以"i"或者"4"开头

[root@miner-k ~]# grep  -E "^[^i4]" test

查找imaa或者g

[root@miner-k ~]# grep  -E "imaa|g" test

[root@miner-k ~]# grep  -E "ima(a|g)" test   查找imaa或者imag

参数


-i, --ignore-case					忽略大小写
-l, --files-with-matches			只列出匹配行所在的文件名
-n, --line-number					在每一行前面加上它在文件中的相对行号
-c, --count							显示成功匹配的行数
-s, --no-messages				    禁止显示文件不存在或文件不可读的错误信息

-q, --quiet, --silent				静默--quiet, --silent
-v, --invert-match				    反向查找,只显示不匹配的行

-R, -r, --recursive					递归
--color							    颜色

-o, --only-matching				    只显示匹配的内容

-B, --before-context=NUM  	print NUM lines of leading context
-A, --after-context=NUM   	print NUM lines of trailing context
-C, --context=NUM         		print NUM lines of output context

常用实例

查询指定目录下包含root的文件
[root@miner-k ~]# grep -r 'root' /etc/    # 显示文件名和具体内容

[root@miner-k ~]# grep -rl /etc/     #  只显示文件名
查询连接22端口的非ESTABLISHED状态的会话
[root@miner-k ~]# netstat -anlp | grep :22 | grep -v "ESTABLISHED"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值