Linux grep使用详解

Linux grep使用详解


概述

grep 是Linux/Unix下,对于一组输入文本进行搜索与匹配的一个实用工具。grep 从输入文本中搜索并匹配给定的文本或者模式,这些文本可以是固定内容的文本,也可以用正则表达式去进行搜索匹配,grep 的功能在很多场景下都非常强大,本文将记录一些比较常用的功能。


选项与参数(符号‘,’ 分割的选项效果等同)

  • -A num, –after-context=num 打印出匹配结果之后的num行文本.
  • -B num, –before-context=num 打印出匹配结果之前的num行文本.
  • -C num, –context=num 打印出匹配结果之前与之后的num行,等同于同时使用-A num与-B num.
  • -a, –text= 将所有文件视为ASCII文本对待.

part 1 example:

​ 假定有一个hello.c文件,实现的是最简单的打印hello world功能,想在该文件中查找某个固定内容文本,可以这样用:

cat hello.c | grep -a ‘hello world’ #通过管道将cat的执行结果传递给grep,并查找hello world字符串

cat hello.c | grep -A 10 -a ‘hello world’ #查找hello world并打印其后10行内容

cat hello.c | grep -C 10 -a ‘hello world’ #查找hello world并打印其前后各10行内容

  • -c, –count 输出搜索到 ‘搜索字符串’ 的行数.
  • -n, –line-number 每行搜索结果之前显示结果所在文件中的行号.
  • -f file, –file=file 在指定文件中搜索文本或模式.
  • -v, –invert-match 搜索不包含搜索文本或模式的行.
  • -i, –ignore-case 忽略大小写区别.

part 2 example:

cat hello.c | grep -n -A 10 -a ‘hello world’ #在part 1例子的基础上,结果显示将多显示一个行号

cat hello.c | grep -n -v -a ‘hello world’ #结果将显示不包含hello world的行及行号

  • -e pattern, –regexp=pattern 搜索符合pattern的字符串.

正则表达式规则

  1. ^ #界定行的开始,如 ‘^grep’ 意为匹配以grep开始的行
  2. 美元符号(markdown抽风,不能打这个。。) #界定行的结束,如 ’ grep$ ’ 意为匹配以grep结尾的行
  3. . #匹配一个非换行字符,如 ‘gr.p’ 意为匹配gr后接任意一个非换行字符,其后是p的行
  4. 星号 #匹配零个或多个先前字符 如:’*grep’匹配所有一个或多个空格后紧跟grep的行
  5. .* #同时用代表任意字符
  6. [] #匹配一个指定范围内的字符,如 ‘[Gg]rep’ 意为匹配Grep或者grep
  7. [^] #匹配不在一个指定范围内的字符,如 ‘[ ^a-zA-Z ]’ 意为匹配不含英文字母的字符
  8. \w #匹配英文字母及数字字符,等同于’[ a-zA-Z0-9 ]’,如 ‘G\w*p’ 意为G后接零个或多个英文字母或数字字符
  9. \W #匹配非英文字母及数字字符,等同于’[ ^a-zA-Z0-9 ]’
  10. \b #单词锁定符,如 ‘\bgrep\b’ 只匹配grep

POSIX字符

​ POSIX增加的特殊字符类,如 [:alnum:] 等同于a-zA-Z0-9,[[:alnum:]]等同于[a-zA-Z0-9],[:alnum:]一定要放入[]之间才有效。

  1. [:alnum:] #英文字符及数字字符
  2. [:alpha:] #英文字符
  3. [:digit:] #数字字符
  4. [: graph :] #非空字符(非空格、控制字符)
  5. [:cntrl:] #控制字符
  6. [:punct:] #标点符号
  7. [:space:] #所有空白字符
  8. [:upper:] #大写英文字符
  9. [:lower:] #小写英文字符
  10. [:xdigit:] #十六进制数字

part 3 example:

cat hello.c | grep -n -e ^hello #查找hello.c中以hello开始的行


PS:

​ 更多的使用方法还需要进一步在实践中慢慢摸索,grep对于平时的各种搜索都能轻松实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值