linux学习lesson26

本文详细讲解了正则表达式的概念及其在grep命令中的应用,包括各种选项如-c、-i、-n等的使用方法,以及如何通过正则表达式过滤特定模式的行。通过实例演示了如何在shell脚本中高效地搜索和处理文本文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 grep命令


1 grep命令

什么是正则

  • 正则就是一串有规律的字符串
  • 掌握好正则对于编写shell脚本有很大帮助
  • 各种编程语言中都有正则,原理是一样的
  • 本章将要学习grep/egrep、sed、awk

 

grep [-cinvABC] 'word' filename

-c:表示打印符合要求的行数

-i:表示忽略大小写

-n:表示输出符合要求的行及其行号

-v:表示打印不符合要求的行

-r 遍历所有子目录

-A:后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面两行

-B:后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行

-C:后面跟一个数字,例如-C2表示打印符合要求的行以及上下各两行

  •  拷贝/etc/passwd作为实验文件
[root@worker1 dir9]# cp /etc/passwd ./testpasswd
[root@worker1 dir9]# ls
testpasswd
  • 过滤匹配字符“nologin”的行
  • [root@worker1 dir9]# grep 'nologin' testpasswd

  • 参数:-n
  • [root@worker1 dir9]# grep -n 'nologin' testpasswd

  • 参数:-v
  • [root@worker1 dir9]# grep -nv 'nologin' testpasswd

  • 参数:-i
  • [root@worker1 dir9]# vim testpasswd //将第一行的root改为ROOT
  • ROOT:x:0:0:root:/root:/bin/bash
  • [root@worker1 dir9]# grep -ni 'root' testpasswd

  • 参数:-r
  • [root@worker1 dir9]# grep -r 'nologin' /etc/ | head

  • 参数:-A
  • [root@worker1 dir9]# grep -nA1 'adm' testpasswd

  • 参数:-B
  • [root@worker1 dir9]# grep -nB1 'adm' testpasswd

  • 参数:-C
  • [root@worker1 dir9]# grep -nC1 'adm' testpasswd

  • 拷贝/etc/inittab作为实验文件
[root@worker1 dir9]# cp /etc/inittab ./testinittab
[root@worker1 dir9]# ls
testinittab  testpasswd
  • 过滤带有[0-9]数字的行
  • [root@worker1 dir9]# grep '[0-9]' testinittab

  • 过滤不带有[0-9]数字的行
  • [root@worker1 dir9]# grep -v '[0-9]' testinittab

过滤不带有^#开头的行

[root@worker1 dir9]# vim testinittab //在末尾添加以下三行
hello world
123
11 22
[root@worker1 dir9]# grep -v '^#' testinittab
hello world
123
11 22
  • 先过滤非字母的行,再过滤非数字行
[root@worker1 dir9]# grep -v '^[^a-zA-Z]' testinittab
hello world
  • 过滤出符合r.o形式的行
  • [root@worker1 dir9]# grep 'r.o' testpasswd

  • 过滤出符合o,oo或者多个ooo形式的行

  • 匹配任何字符的内容
  • [root@worker1 dir9]# grep '.*' testpasswd

  • 过滤带有两个o的内容
  • [root@worker1 dir9]# grep 'o\{2\}' testpasswd

  • 过滤带有0~2个o的内容
  • [root@worker1 dir9]# grep 'o\{0,2\}' testpasswd

  • 过滤带有两个o的内容
  • [root@worker1 dir9]# egrep 'o{2}' testpasswd

  • 过滤带有一个或者多个o的内容
  • [root@worker1 dir9]# egrep 'o+' testpasswd

  • 过滤带有两个o或者一个0的内容
  • [root@worker1 dir9]# egrep 'oo?' testpasswd

  • 过滤出带有'root或nologin的内容
  • [root@worker1 dir9]# egrep 'root|nologin' testpasswd

  • 过滤出带有四个oooo字符内容
[root@worker1 dir9]# vim testpasswd  //将第一行的其中一个root改为roooot
  • [root@worker1 dir9]# egrep '(oo){2}' testpasswd

 

 

 扩展
把一个目录下,过滤所有*.php文档中含有eval的行
grep -r --include="*.php" 'eval' /data/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值