SHELL编程三剑客之grep详解

SHELL编程三剑客之grep详解

       grep  UNIX Linux 系统中非常强大的文本搜索工具,它使用正则表达式来搜索文本,并将匹配的行打印出来。grep  "global regular expression print" 的缩写,意为全局正则表达式打印。

以下是 grep 的一些基本用法和高级特性:

基本用法

  • 搜索文件中的文本

bash

grep "text" filename

  • 忽略大小写

bash

grep -i "text" filename

  • 显示匹配行的行号

bash

grep -n "text" filename

  • 只显示匹配的文件名

bash

grep -l "text" *

  • 显示不匹配的行

bash

grep -v "text" filename

  • 使用扩展正则表达式

bash

grep -E "text|pattern" filename

bash

egrep "text|pattern" filename

高级特性

  • 使用正则表达式
    • . 匹配任意单个字符
    • * 匹配前面的字符0次或多次
    • ^ 匹配行的开始
    • $ 匹配行的结束
    • [abc] 匹配abc中的任意一个字符
    • [^abc] 匹配除abc之外的任意一个字符
    • \d 匹配数字
    • \w 匹配字母、数字或下划线
    • \s 匹配空白字符
    • \b 匹配单词边界
  • 递归搜索

bash

grep -r "text" directory/

  • 只列出匹配的文件名,而不列出匹配的行

bash

grep -l "text" *

  • 使用-A-B-C选项来显示匹配行前后的行
    • -A NUM:显示匹配行后的NUM
    • -B NUM:显示匹配行前的NUM
    • -C NUM:显示匹配行前后的NUM
  • 使用--color--colour选项高亮显示匹配的文本

bash

grep --color "text" filename

  • 使用-o只输出匹配的部分

bash

grep -o "pattern" filename

  • 使用-c--count计算匹配的行数

bash

grep -c "text" filename

  • 使用-r-R递归搜索

bash

grep -r "text" directory/

  • 使用-l--files-with-matches只列出包含匹配项的文件名

bash

grep -l "text" *

  • 使用-L--files-without-match列出不包含匹配项的文件名

bash

grep -L "text" *

这只是 grep 的一些基本和高级用法。grep 是一个非常强大的工具,可以通过组合不同的选项和正则表达式来实现各种复杂的文本搜索和处理任务。

正则表达式的高级用法包括但不限于以下几种:

  1. 分组和引用:分组是指将正则表达式中的一部分内容括在小括号中,形成一个子表达式。通过分组,可以对子表达式进行重复、选择、引用等操作。例如,(a|b)+ 表示匹配一个或多个 a b(\d{3})-(\d{4})-\1 表示匹配形如“123-4567-123”的字符串,其中 \1 表示引用第一个分组中匹配到的内容(即“123”)。
  2. 零宽断言:零宽断言是指在不匹配任何字符的情况下进行位置判断。常见的零宽断言有正向零宽断言 (?=pattern),表示当前位置后面紧跟着 pattern 才能匹配成功;负向零宽断言 (?!pattern),表示当前位置后面不紧跟着 pattern 才能匹配成功;以及正向回顾后发断言 (?<=pattern)
  3. 贪婪与非贪婪匹配:正则表达式中的量词(如 *+?)默认是贪婪的,即从最长的开始匹配,有回溯。而非贪婪匹配(如 *?+?)则从最小的开始匹配。
  4. 预查:预查是一种非获取匹配,它只进行位置的判断,并不消耗字符。常见的预查方式有正向肯定预查 (?=pattern)、正向否定预查 (?!pattern)、反向肯定预查 (?<=pattern) 和反向否定预查 (?<!pattern)
  5. 条件匹配:正则表达式还支持条件匹配,例如 (?i:a)b 只对 a开启不区分大小写的开关,所以它只能匹配abAb,不能匹配aBAB
  6. 侵占模式(?>Pattern) 等同于侵占模式,匹配成功不进行回溯。例如,\d++ 可以写为 (?>\d+)

这些高级用法可以极大地扩展正则表达式的功能,使其能够处理更复杂的文本匹配和替换任务。然而,它们也增加了正则表达式的复杂性和学习难度,因此在使用时需要谨慎和细心。

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lqcbj_IT老混混

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值