0409 第十一次课:三剑客-grep

本文详细介绍了正则表达式的概念及其在grep命令中的应用,通过实例演示了如何使用正则表达式进行复杂的文本匹配任务,包括字符匹配、贪婪匹配等高级技巧。

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

正则_grep

一、正则介绍

  • 正则就是一串有规律的字符串,包括各种特殊符号
  • 掌握正则对于编写shell有很大帮助
  • 各种编程中都有正则,原理是一样的

二、grep

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

  • grep用法

    grep [-cinvrABC] 'word' filename

    参数说明:

    |参数|说明| |---|---| |-c|统计| |-n|显示行| |-i|不区分大小写| |-r|遍历所有的子目录| |-v|取反| |-A|后面跟数字,过滤出符合要求的行及下面n行| |-B|后面跟数字,过滤出符合要求的行及上面n行| |-C|后面跟数字,过滤出符合要求的行及上下n行|

  • 常用示例

    1、匹配字符并显示行号

    grep -n "root" /etc/passwd

    2、匹配非"root"行并显示行号

    grep -vn "root" /etc/passwd

    3、匹配“root”行,并显示下面两行。

    grep -A2 -n 'root' /etc/passwd

    4、匹配“root”行,并显示上面两行

    grep -B2 -n 'root' /etc/passwd

    5、匹配“root”行,并显示上下两行。

    grep -C2 -n 'root' /etc/passwd

    6、区分不大小写显示

    grep -i "A" 1.txt

    7、遍历所有子目录匹配

    查找root目录下所有包含“root”的文件并显示出来

    grep -r "root" /root/

  • grep正则操作

    1、匹配带数字的行

    grep [0-9] /etc/passwd

    [0-9]就是0到9的意思

    2、匹配以非“#”开头的行

    grep -v '^#' 1.txt

    3、匹配所有非数字

    grep '[^0-9]' 2.txt

    把^符号放在[]中就是非的意思。

    4、匹配所有非数字开头的行

    grep '^[^0-9]' 2.txt

    5、匹配所有“rxot”的行,”"."代表任意一个字符

    grep "ro.t" 1.txt

    6、多个字母匹配

    grep 'o*o' passwd

    ""代表左边的字符重复0-n次,也就是一个o也会匹配,ooo....多个也会匹配

    7、贪婪匹配

    grep '.*' 1.txt

    "."表示贪婪匹配,所有的都会被匹配。“.”表示一个任意字符,“”代表*左边的字符重复0-n次,加在一起就是匹配所有的就叫贪婪匹配。

    8、指定字符出现次数匹配

    grep 'o\{2\}' 1.txt

    {2}表示出现的次数,o是指指定的字符。\表示脱意

  • egrep

    在grep中使用+ {} () | 需要时\进行脱意。不想脱意可以使用 egrep 或者 grep -E

  • 其它一些符号使用

    示例:

    1、()组合字符

    egrep '(oo){2}' 1.txt

    ()表示组合的意思

    2、“+”匹配

    +类似于*,不同的是+是1-n次,*是0-n次,如下图单个o不会被匹配到

    3、“?”匹配

    ?表示左边字符的重复次数为0或者1

    grep 'o\?t' 1.txt

    4、 “|” 符号或者匹配

    '|'表示或者,比如root|tes就是匹配‘root’或者‘test’的意思

    grep -E 'root|test' 1.txt

  • 扩展

    过滤一个目录下所有*.php文档中含有eval的行。

    grep -r --include "*.php" 'eval' /usr/local/php/

转载于:https://my.oschina.net/u/3755326/blog/3033589

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值