Linux grep命令详解:

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

Unix的grep家族grep、egrep和fgrep。egrep和fgrep的命令只只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,他们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示其自身的字面意义,不再特殊。Linux使用GUN版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep功能。

 grep常用用法:

[root@www ~]#grep [-acinv]  [--color=auto]  `搜寻字符串` filename

选项与参数:

-a  :将binary文件以text文件的方式搜寻数据

-c   : 计算找到`搜寻字符串`的次数

-i   :忽略大小写的不同,所以大小写视为相同

-n  : 顺便输出行号

-v  : 反向选择,亦即显示出没有`搜寻字符串`内容的那一行!

--color=auto : 可以将找到的关键词部分加上颜色的显示喔!

将 /etc/passwd,有出现root的行取出来

#grep root /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

#cat /etc/passwd |grep root

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

将/etc/passwd,有出现root的行提取,同时显示这些行在/etc/passwd的行号

#grep -n root /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

30:operator:x:11:0:operator:/root:/sbin/nologin

在关键字的显示方面,grep可以使用--color=auto来讲关键字部分使用颜色显示。这可是个很不错的功能啊!但是如果每次使用grep都得要自行加上--color=auto又显得很麻烦~此时那个好用的alias就得来处理一下啦!你可以再~/.bashrc内加上这行:[alias grep=`grep --color=auto`] 再以[source ~/.bashrc]来立即生效即可喔!这样每次运行grep它都会自动帮你加上颜色显示啦

将/etc/passwd,将没有出现root的行取出来

#grep -v root /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

将/etc/passwd,将没有出现root和nologin的行取出来

#grep -v root /etc/passwd |grep -v nologin

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

用dmesg列出核心信息,再以grep找出含eth那行,要将捉到的关键字显色,且加上行号表示:

[root@www ~]#dmesg |grep -n --color=auto `eth`

247:eth0:RealTek RTL8139 at 0xee846000,00:90:cc:a6:34:84,IRQ 10

248:eth0:Identified 8139 chip type `RTL-8139C`

294:eth0:link up, 100Mbps,full-duplex,lpa 0xC5E1

305:eth0: no IPv6 routers present

#你会发现除了eth会有特殊颜色来表示之外,最前面还有行号喔!

用dmesg列出核心信息,再以grep找到内含eth那行,在关键字所在行的前两行与后三行也一起捉出来显示

#dmesg |-n A3 -B2 --color=auto `eth`

as level-triggered

246-ACPI:pci Interrupt 0000:00:0e.0[A] -> Link [LIKB] ...

:eth0:RealTek RTL8139 AT 0xee846000, 00:90:cc:a6:34:84,IRQ 10

:eth0: Identified 8139 chip type `RTL-8139C`

249-input: PC Speaker as /class/input/input2

250-ACPI: PCI Interrupt 0000:00:01.4[B] ->Link [LIKB] ...

)

所在的前两行及后三行也都被现实出来!

#这样可以让你将关键字前后数据捉出来进行分析啦!

根据文件内容递归查找目录

#grep `energywise` *    #在当前目录搜索带`energywise`行的文件

#grep -r `energywise` *    #在当前目录及子目录下搜索`energywise`行的文件

#grep -l -r `energywise` *    #在当前目录及其子目录下搜索`energywise`行的文件,但是不显示匹配的行,只显示匹配的文件

这几个命令很实用,是查找文件的利器。

grep与正则表达式

字符类

字符类的搜索:如果我想要搜寻test或taste这两个单字时,可以发现到,其实他们有共通的`t?st`存在~这个时候,我可以这样来搜寻:

[root@www ~]#grep -n `t[ae]st` regular_express.txt

8:I can't finish the test.

9:Oh! The soup taste good.

其实[]里面不论有几个字节,他都仅代表[一个]字节,所以,上面的例子说明了,我需要的字串是[tast]或[test]两个字而已!

字符类的反向选择[^]:如果想要搜索到有oo的行,但不想要oo前面有g,如下

[root@www ~]#grep -n `[^g]oo` regular_express.txt

2:apple is my favorite food.

3:Football game is not use feet only.

18:goole is the best tools for search keyword.

19:goooooogle yes!

第2,3行没有疑问,因为foo与Foo均可被接受!

但是第18行明明有google的goo啊~别忘记了,因为该行后面出现了tool的too啊!所以该行也被列出来~ 也就是说,18行里面虽然出现了我们所不要的项目(goo)但是由于有需要的项目(too),因此,是符合字串搜寻的喔!

至于第19行,同样的,因为goooooogle里面的00前面可能是o,例如:go(ooo)oogle,所以,这一行也是符合需求的!

字符类的连续:再来,假设我oo前面不想要有小写字节,所以,我可以这样写[……abcd....z]oo,但是这样似乎不怎么方便,由于小写字节的ASCII上编码的顺序是连续的,因此我们可以将之简化为底下这样:

[root@www ~]#grep -n `[^a-z]oo` regular_express.txt

3:Football game is not use feet only.

也就是说,当我们在一组集合字节中,如果该字节组是连续的,例如大写英文/小写英文/数字等等,就可以使用,[a-z],[A-Z],[0-9]等方式来书写,那么如果我们的要求字串是数字与英文呢?呵呵!就将它全部写在一起,变成:[a-zA-Z0-9]。

我们要取得有数字的那一行,就这样:

#grep -n `[0-9]` regular_express.txt

5:However,this dress is about $3138 dollars.

15:You are the best is mean you are the no.1.

行首与行尾字节……¥

行首字符:如果我想要让the只在行首列出呢?这个时候就得要使用定位字节了!我们可以这样做:

[root@www ~]#grep -n `^the` regular_express.txt

12:the synbol `*` is represented as start.

此时,就只剩第12行,因为只有第12行的行首是the开头啊~此时,如果我想要开头是小写字节的那一行就列出呢?可以这样:

[root@www ~]#grep -n `^[a-z]` regular_express.txt

2:apple is my favorite food.

4:this dress doesn't fit me.

10:motorcycle is cheap than car.

12the synbol `*`is represented as start.

18google is the best tools for search keyword.

19:goooooogle yes!

20:go! go! Let's go.

每天一个Linux命令 3的更多相关文章

  1. 每天一个 Linux 命令(21):find命令之xargs

    在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...

  2. 每天一个linux命令(25):linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loca ...

  3. 每天一个linux命令(46):vmstat命令

    vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深 ...

  4. 每天一个linux命令目录

    出处:http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每 ...

  5. 每天一个 Linux 命令(20):find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是command ...

  6. 每天一个linux命令(20):find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是command ...

  7. 每天一个Linux命令

    每天一个Linux命令(1):ls命令 每天一个Linux命令(2):cd命令 每天一个Linux命令(3):pwd命令 每天一个 Linux 命令(4):mkdir 每天一个 Linux 命令(5) ...

  8. 每天一个linux命令-转载

    每天一个linux命令目录 转载自: http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html   开始详细系统的学习linux常用命令 ...

  9. [转]每天一个linux命令目录

    [转]每天一个linux命令目录 http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 开始详细系统的学习linux常用命令,坚持每 ...

  10. 每天一个linux命令(45)--telnet命令

    每天一个Linux命令,今天是网络命令中的Telnet. Telnet 命令通常用来远程登录,Telnet 程序是基于 Telnet 协议的远程登录客户端程序.Telnet 协议是TCP/IP协议族中 ...

随机推荐

  1. springMvc获取servletContext

    springMvc获取servletContext WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebA ...

  2. mongoDB查询及游标

    find文档 1.find简介 使用find查询集合中符合条件的子集合 db.test.blog.find(); 类似于sql查询 select * from test.blog 上面的查询是返回多有 ...

  3. JS之ONLoad事件

    如果我问你window.load和window.onload分别是什么意思,恐怕你会回答我:“这不是页面加载完就执行吗”. 但是答案是不一定,得看你怎么用.看一下例子吧 例1: <!DOCTYP ...

  4. 在windows下安装运行disconf

    一.环境准备 1.下载disconf源码 (本文以2.6.36为例) https://github.com/knightliao/disconf 2.下载nginx1.10.2(windows版) h ...

  5. KB奇遇记(6):搞笑的ERP项目团队

    早在我们来之前,KB公司这边就已经组建了ERP项目组了,当时IT就只有一个人,属网管出身.而关键用户分两种类型:专职关键用户和兼职关键用户.专职关键用户组织结构上已经调动到信息部,常驻在项目组里工作, ...

  6. 【The Most Important】浅谈JSP表单Post方式中文乱码问题

    首先祝大家鸡年吉祥!在这里我要说下这两天里这个问题困扰着我,大过年的心情都被烦扰的不好了,所以我带着兴奋的心情来赶快完成这篇博客,解决大家的问题.我的问题是post方式传递表单数据,Tomcat服务器 ...

  7. 【java设计模式】之 工厂(Factory)模式

    1.工厂模式的定义 工厂模式使用的频率非常高,我们在开发中总能见到它们的身影.其定义为:Define an interface for creating an object, but let subc ...

  8. css3 3d小demo

    css3 3d案例总结 最近入坑 Web 动画,所以把自己的学习过程记录一下分享给大家.就把最近做的比较好的给大家分享下 1.旋转拼图 首先看下效果 代码主要由HTML和CSS3组成,应该说还是比较简 ...

  9. 对JavaScript中this的理解

    JavaScript中的this其实没传说中的那么难,也没那么乱. 我们来分析下,this主要是跟它的执行环境有关. 而通常情况下,this都是放在函数体中或可执行的JS代码中(函数体除外). 至于J ...

  10. Azure 基础:用 PowerShell 自动发布 CloudServices

    在软件的开发过程中,自动化的编译和部署能够带来很多的优势.下面我们聊聊如何自动发布云应用程序到 azure 上的 cloud services. 打包要发布的内容 首先使用 msbuild 编译 *. ...