linux grep原理,【Linux】grep的高级使用

序言

这篇文章会写grep的一些案例,如果你对grep的使用不太了解,那么就跟这文章一点点的实战吧!

1. 基础正则表达式练习

所需的文件

wget http://linux.vbird.org/linux_basic/0330regularex/regular_express.txt

6b159bd9d7b8b2aa3d40729c8cde9e0b.png

搜寻特定字符

搜寻特定字串很简单吧?假设我们要从刚刚的文件当中取得 the 这个特定字串,最简单的方 式就是这样:

grep -n 'the' filename

加 -n会显示文件行号,而且还是区分大小写的

ccbb71d4ca4ee0a27fdd60db70846a8e.png

不区分大小写的查找,会发现比上边多了几行,那是因为不区分大小写,把所有的行显示出来

872e7d5de4118919cc5e742972d46f3a.png

利用中括号[]来搜寻字符

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

grep -n 't[ea]st' filename

778fcabc13c5757540919aa0d2364edf.png

其实 [] 里面不论有几个字符,他都仅代表某“一个”字符, 所以,上面的例子说明 了,我需要的字串是“tast”或“test”两个字串而已! 而如果想要搜寻到有 oo 的字符时,则使 用:

d8d6b0816bcd98fa5671cad0a368c16f.png

但是,如果我不想要 oo 前面有 g 的话呢?此时,可以利用在集合字符的反向选择 来达成 意思就是说,我需要的是 oo ,但是 oo 前面不能是 g 就是了!仔细比较上面两个表格,你会 发现,第 1,9 行不见了,因为 oo 前面出现了 g 所致!第 2,3 行没有疑问,因为 foo 与 Foo 均 可被接受!但是第 18 行明明有 google 的 goo 啊~别忘记了,因为该行后面出现了 tool 的 too 啊!所以该行也被列出来~ 也就是说, 18 行里面虽然出现了我们所不要的项目 (goo) 但是由于有需要的项目 (too) , 因此,是符合字串搜寻的喔!至于第 19 行,同样的,因为 goooooogle 里面的 oo 前面可能是 o ,例如: go(ooo)oogle ,所以,这一行也是符合需求的

6a91ea606545cf15cd342a66d408ad01.png

取出oo前边的小写

ca3a53a47288da6f1a8337acc4a4cd5e.png

取出带数字的行

22056242084c7b5c8aefbbcb10a69c6f.png

取出以the开头的行

da216ce21df44cf8add32bdf3c26762b.png

取出以小写字母开头的行

e11362f620a684c515df459b02c8fc23.png

取出开头不想为字母的行

706974884f97589e77161140f84c77c2.png

2. 注意点:注意到了吧?那个 ^ 符号,在字符集合符号(括号[])之内与之外是不同的! 在 [] 内代表“反 向选择”,在 [] 之外则代表定位在行首的意义!要分清楚喔,写在这里是为了醒目,哈哈

取出尾行为小数点的

小数点具有其他意义,所以必须要使用跳脱字符(\)来加 以解除其特殊意义!

9cbacf7c4f0d7002069a79e275adbc5f.png

取出空白行

697ee1b77492af78e9bf30fb6b5d3b70.png

需要找出 g??d 的字串

d5756e30c186d12c6a5950cc9b632d53.png

想要找出 g 开头与 g 结尾的字串

但测试的结果竟然出现这么多行?太诡异了吧?其实一点也不诡异,因为 gg 里面的 g 代 表“空字符或一个以上的 g” 在加上后面的 g ,因此,整个 RE 的内容就是 g, gg, ggg, gggg , 因此,只要该行当中拥有一个以上的 g 就符合所需了!

那该如何得到我们的 g....g 的需求呢?呵呵!就利用任意一个字符“.”啊! 亦即是:“g.g”的作 法,因为 可以是 0 或多个重复前面的字符,而 . 是任意字符,所以: “.* 就代表零个或多个任 意字符”的意思啦!

117ea012083b8fd6137c715534ec6d58.png

f6448ee81317a6418b1fc2578dd095ee.png

13. 要找出“任意数字”的行列

bfee2f3c4ae5ede8e344930806c84ae8.png

14.

3. 案例

当我们搜寻配置文件时,那是相当痛苦的,因为配置文件里边有很多都是#开头的,但是我们又不需要的,下来就解决这个问题

134925cdab8585f79609945471412fe3.png

搜寻出不以#开头的

9d524d06f7ebe3fd88c8098c719d4228.png

当文件里边有空格时,去除空格的也是可以的

c3d4689b2080e66c8c9ab38ae5ef41bc.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Re:《文本处理 awk sed grep ”三剑客”》 ============================================================== 本人在教学和实战过程中发现,即便是有一定运维经验的人,可能已经能够搭建一定复杂度的Linux架构,但是在来来回回的具体操作中,还是体现出CLI(命令界面)功底不够扎实,甚至操作的非常‘拙’、处处露‘怯’。 对一个士兵来说,枪就是他的武器,对于一个程序员来说,各种library(工具库)就是他的武器;而对于Linux运维人员来说,无疑命令行工具CLI(命令界面)就是他们的武器;高手和小白之间的差距往往就体现在对于这些“武器”的掌握和熟练程度上。有时候一个参数就能够解决的事情,小白们可能要写一个复杂的Shell脚本才能搞定,这就是对CLI(命令界面)没有理解参悟透彻导致。 研磨每一个命令就是擦拭手中的作战武器,平时不保养不理解,等到作战的时候,一定不能够将手中的武器发挥到极致,所以我们要平心、静气和专注,甘坐冷板凳一段时间,才能练就一身非凡的内功! 本教程从实战出发,结合当下流行或最新的Linux(v6/7/8 版本)同时演示,将命令行结合到解决企业实战问题中来,体现出教学注重实战的务实精神,希望从事或未来从事运维的同学,能够认真仔细的学完Linux核心命令的整套课程。 本课程系列将逐步推出,看看我教学的进度和您学习的步伐,孰占鳌头! 注:关于教学环境搭建,可以参考本人其它课程系列,本教学中就不再赘述! 《参透 VMware 桌面级虚拟化》 《在虚拟机中安装模版机(包括应用软件等)》 《SecureCRT 连接 GNS3/Linux 的安全精密工具》---------------------------------------         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值