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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值