grep  筛选功能

学习这些命令采用20/80原则,这样,可以达到使用%20的命令选项,处理80%的情况。

#grep 的使用格式
grep [option] pattern file

那么接下来看看我自己选择的一些grep的命令选项:

-c 计算符合范本的列数
-i 忽略pattern中的大小写
-w 忽略大小写,并搜索整个词汇
-r 递归的搜索所在目录的所有子目录
-v 查找和pattern不匹配的行
-n 打印出匹配行的行号
--color=auto 将pattern在匹配行中高亮
-A 后面加上数字,为after的意思,表示后续的n也列出来
-B 后面加数字,为before的意思,便是前面n行也列出来

grep的基本使用

这里我在.bashrc 加入了一个命名别名:alias  grep=grep --color=auto

#输出last中有某用户名的一行
>># last | grep 'panhao'

很多时候grep用于管道之后,pattern部分可以使用引号引起来,也可以不用

#-v参数使用
>> # last | grep -v panhao

#用dmesg列出内核信息,再以grep找出内含eth的那行
dmesg | grep 'eth'

#显示行号的grep
dmesg | grep -n 'eth'

#参数  -A -B的使用
dmesg | grep -n A1 B2 'eth'

以上是grep的基本用法,后面还有grep与正则表达式的结合

  •  基础正则表达式

1.特殊字符

^string 意义:待查找的字符串在行首(以string开头的)
string$ 意义:待查找的字符串在行尾(以string结尾的)
. 意义:代表一定有一个任意字符的字符在该位置
\ 意义:转义字符,将命令中的特殊字符去除
* 意义:重复零个或者多个前一个字符
[list] 意义:选取待查找的字符(比如:[afl]代表"a"或者"f"或者"l")
[n1-n2] 意义:代表n1到n2的字符集合(注意:这个表达式和bash使用的编码有关,后面会提到)
[^list] 意义:反向查找,没有list字符集合的字符串
\{n,m\} 意义:连续n到m个前一个字符。若为\{n\}则是连续n个前一个字符,若为\{n,\}则为连续n个以上的字符。

2.编码语系对正则表达式的影响

先看两种语系下字符集的差别

  • LANG=C 时:0 1 2 3 4 ... A B C D ... Z a b c d ... z
  • LANG=zh_CN时:0 1 2 3 4 ... a A b B c C d D ... z Z

从上面的编码的顺序很容易看出两种编码的差别。所以同一个正则表达式在两种编码下就会存在差异:

[A-Z] 在LANG=C时,是正常的意思,在LANG=zh_CN时,代表A b B c C d D ... z Z,就会出现并不是我们想要的字符。

所以我们可以使用下面一些特殊字符来表示意思。

这里只列出几个常用的就行:

[:alnum:]   代表英文大小写字符,及数字

[:alpha:]    代表任何英文字符  a-z  A-Z

[:upper:]   代表大写字母   A-Z

[:lower:]  代表小写字母  a-z

[:digit:]     代表数字  0-9

3.接下来是grep的一些高级参数

grep可以使用正则表达式来筛选自己需要的字段。

(1)使用"[]"来查找集合字符

如果我想要查找test和tast这两个单词,可以使用正则表达式如下:

# grep -n 't[ae]st' file

如上所示,根据这两个单词的共同点,把不同的地方用"[]"字符集合表示。

集合可以使用反向选择符等一些符号来丰富命令。

比如:

#使用方向选择符,和a-z表示所有的小写字母
# grep '[^a-z]oo' file #也可以变为之前跟编码无关的符号 [:lower:],如下
# grep '[^[:lower:]]oo' file

(2)行首符号"^"和行尾符号"$"

这里注意区分行首符号与反向选择符号的区别,区别在于是否在中括号[]中,在中括号的是反向选择符号,没有在的是行首符号

比如我们选择行首有"the"的

# grep -n '^the' file

# 下面写一个既有反向选择又有行首的grep
# grep -n '^[^[a-zA-Z]]' file
#行尾的例子:找出行尾为"."结束的,因为"."在这里有特殊的含义,所以需要使用转义字符
# grep -n '\.$' file #寻找空白行
# grep -n '^$' file #只有行首和行尾的就是空白行

(3)任意一个字符"." 与重复字符"*"

"." 小数点:代表一定有一个任意字符的意思。

"*"星号:代表重复前一个字符0到无穷大次。    (请特别注意这里,它是可以重复0次的)

如下:

# grep -n 'g..d' file     #可以匹配到 good glad 等一些字符串

# grep -n 'o*' file       #执行这一句你会发现,打印出了所有的行。因为可以是0个“o”

那么当我们需要重复某个字符至少多次可以像这样写,"ooo*"  这代表至少重复两次以上。

(4)限定字符范围 {}

因为{}在shell中是有特殊用途的,所有在使用的时候需要加上转义符号"\",使其变为一般的{}

# grep -n 'o\{2\}'  file   #两个o的字符
# grep -n 'go\{2,5\}gle' #代表后面接2-5个o字符
# grep -n 'gp\{2,\}g' file #代表两个以上

参考boke:

每天一个linux命令(39):grep 命令

如何使用Unix/Linux grep命令——磨刀不误砍柴工系列

grep命令

【one day one linux】grep工具的更多相关文章

  1. linux中grep工具

    正则表达式 以前我们用grep在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义.其实grep还可以找出符合某个模式(Pattern)的一类字符串.例如找出所有符合xxxxx@xxxx. ...

  2. Linux小工具的应用,grep,sort,wc,cut

    小工具的使用: 1.管道(|):连接多个命令的工具,进程之间通讯的一种方式 用法:命令1 | 命令2 | 命令3....2.grep工具:行过滤,打印出的结果一行一行的 用法:grep options ...

  3. linux grep命令

    linux grep命令1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressio ...

  4. Linux性能工具介绍

    l  Linux性能工具介绍 p  CPU高 p  磁盘I/O p  网络 p  内存 p  应用程序跟踪 l  操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l  应用程序的性能问题/功能问 ...

  5. linux grep命令详解

    linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...

  6. linux shell工具集合

    1)判断进程是否存在,如果不存在再执行启动命令,可以避免一个脚本同时启动多份 if [ $(ps -ef |grep  bastion_account.sh|grep -v grep|wc -l) - ...

  7. linux grep命令总结

    风生水起善战者,求之于势,不责于人,故能择人而任势. 博客园    首页    新随笔    联系    订阅    管理 posts - 791,  comments - 394,  trackba ...

  8. Linux/Unix工具与正则表达式的POSIX规范

    http://www.infoq.com/cn/news/2011/07/regular-expressions-6-POSIX 对正则表达式有基本了解的读者,一定不会陌生『\d』.『[a-z]+』之 ...

  9. 使用linux perf工具生成java程序火焰图

    pre.cjk { font-family: "Nimbus Mono L", monospace } p { margin-bottom: 0.1in; line-height: ...

随机推荐

  1. bash之重定向

                                                                          标准输入 stdin:代码为0,使用< 或 <& ...

  2. Web平台安装及检测程序

    软件名称:microsoft web platform installer 上图: 可以看做是一个App Store, 你再也不用东奔西跑去找什么开发软件,CMS等等了,直接打开这个,勾选上就安装吧, ...

  3. java配置文件的读写

    最近在做一个爬虫项目时,用到了读写配置文件的方法,记录下来以后可能用的到. Properties pro = new Properties(); boolean IsFirst = true; //从 ...

  4. 九度oj题目1207:质因数的个数

    题目描述: 求正整数N(N>1)的质因数的个数. 相同的质因数需要重复计算.如120=2*2*2*3*5,共有5个质因数. 输入: 可能有多组测试数据,每组测试数据的输入是一个正整数N,(1&l ...

  5. python 接口自动化测试(三)

    1.WriteIni.py import ConfigParser cf = ConfigParser.ConfigParser() cf.add_section("PC_WSDL" ...

  6. Octave Tutorial(《Machine Learning》)之第三课《数据计算》

    第三课 Culculating Data 数据计算 矩阵计算 1.简单的四则运算 2.相乘除,乘方运算(元素位运算) ".*"为对应元素的相乘计算 "./"为对 ...

  7. POP3是收邮件的协议,SMTP是发邮件的协议,IMAP是一种邮箱通信协议。

    我也是第一次接触这种服务,是因为我自己在做一个小小的自动推送天气情况到自己邮箱.所以才碰到这个的/ 看一下标题,我们可以先这样理解. POP3(Post Office Protocol - Versi ...

  8. php人员权限管理(RBAC)

    在说权限管理前,应该先知道权限管理要有哪些功能: (1).用户只能访问,指定的控制器,指定的方法 (2).用户可以存在于多个用户组里 (3).用户组可以选择,指定的控制器,指定的方法  (4).可以添 ...

  9. 快乐Node码农的十个习惯 转

    从问世到现在将近20年,JavaScript一直缺乏其它有吸引力的编程语言,比如Python和Ruby,的很多优点:命令行界面,REPL,包管理器,以及组织良好的开源社区.感谢Node.js和npm, ...

  10. 运用google-protobuf的IM消息应用开发(前端篇)

    前言: 公司原本使用了第三方提供的IM消息系统,随着业务发展需要,三方的服务有限,并且出现问题也很难处理和排查,所以这次新版本迭代,我们的server同事呕心沥血做了一个新的IM消息系统,我们也因此配 ...