当前位置: 首页 > ops >正文

linux 三剑客命令学习

grep

Grep 是一个命令行工具,用于在文本文件中搜索打印匹配指定模式的行。它的名称来自于 “Global Regular Expression Print”(全局正则表达式打印),它最初是由 Unix 系统上的一种工具实现的。Grep 工具在 Linux 和其他类 Unix 系统中广泛使用,它提供了强大的文本搜索功能。

基本格式

grep [option] pattern [file…]
grep命令的匹配模式pattern带"“、不带”"和’'的区别如下

  1. 不带引号(直接写模式)
    Shell 会对模式中的特殊字符(如 *、?、$、空格等)进行解释(比如展开通配符或变量)。
    如果模式中包含空格或特殊字符,可能会导致 grep 接收错误的参数。
    示例:
grep hello world file  # 错误!Shell 会认为 `hello` 和 `world` 是两个参数。
grep hello*world file # 如果当前目录有匹配 `hello*world` 的文件,Shell 会先进行文件名扩展。
  1. 双引号 “”
    bash
    grep “pattern” file
    Shell 会解释双引号内的变量($VAR)和命令替换(command 或 $(command)),但其他字符(如 *、?)会被保留。
    适合模式中包含空格或需要保留部分特殊字符(如 $ 用于正则表达式)时使用。
    示例:
grep "hello world" file   # 正确匹配包含 "hello world" 的行。
grep "$USER" file         # Shell 会替换 `$USER` 为当前用户名,然后传递给 grep。
grep "*.txt" file         # `*` 不会被 Shell 扩展,而是作为正则表达式传递给 grep。
  1. 单引号 ‘’
    Shell 不会对单引号内的任何字符(包括变量和通配符)进行解释,所有内容会原样传递给 grep。适合模式中包含需要保留的 $、* 等正则表达式元字符时使用。
    示例:
grep 'pattern' file
grep '$USER' file         # 直接匹配字符串 `$USER`(而非变量值)。
grep 'hello*world' file   # `*` 作为正则表达式的量词(匹配 0 或多个 `o`)。
grep 'a b' file           # 匹配包含 "a b" 的行。

正则表达式

在 Linux 中,正则表达式(Regular Expressions, regex)用于文本匹配和处理,常见的工具如 grep、sed、awk 等都支持正则表达式。正则表达式由 元字符(metacharacters) 和 普通文字(literal characters) 组成:

  1. 普通文字(Literal Characters)
    普通文字就是字面意义上的字符,例如 a、1、- 等,它们匹配自身:
grep "hello" file.txt  # 匹配包含 "hello" 的行

h、e、l、l、o 都是普通文字,直接匹配。

  1. 元字符(Metacharacters)
    元字符在正则表达式中有特殊含义,用于匹配模式。常见的元字符包括:
元字符描述示例
.匹配 任意单个字符(除换行符 \n)a.c 匹配 abc、a1c、a-c
^匹配 行首^hello 匹配以 hello 开头的行
$匹配 行尾world$ 匹配以 world 结尾的行
*匹配前一个字符 0 次或多次go*d 匹配 gd、god、good
+匹配前一个字符 1 次或多次(grep -E 或 egrep 支持) go+d 匹配 god、good,但不匹配 gd
?匹配前一个字符 0 次或 1 次(grep -E 或 egrep 支持) colou?r 匹配 color 和 colour
[…]匹配 括号内的任意一个字符[aeiou] 匹配任意一个元音字母
[^…]匹配 不在括号内的任意一个字符[^0-9] 匹配非数字字符
\转义字符,使元字符变为普通字符\.匹配 . 而不是任意字符
{n}匹配前一个字符 恰好 n 次(grep -E 或 egrep 支持)a{3} 匹配 aaa
{n,}匹配前一个字符 至少 n 次(grep -E 或 egrep 支持)a{2,} 匹配 aa、aaa、aaaa…
{n,m}匹配前一个字符 n 到 m 次(grep -E 或 egrep 支持)a{2,4} 匹配 aa、aaa、aaaa
  1. 正则表达式模式示例
    (1) 基本匹配
grep "hello" file.txt      # 匹配包含 "hello" 的行
grep "^hello" file.txt    # 匹配以 "hello" 开头的行
grep "world$" file.txt    # 匹配以 "world" 结尾的行
grep "h.llo" file.txt     # 匹配 "hallo"、"hello"、"hxllo" 等

(2) 字符类 […]

grep "[aeiou]" file.txt   # 匹配包含任意元音字母的行
grep "[0-9]" file.txt     # 匹配包含数字的行
grep "[^0-9]" file.txt    # 匹配包含非数字的行

(3) 量词 *, +, ?, {n,m}

grep "go*d" file.txt      # 匹配 "gd", "god", "good", "gooood" 等
grep -E "go+d" file.txt   # 匹配 "god", "good", 但不匹配 "gd"
grep -E "colou?r" file.txt # 匹配 "color" 或 "colour"
grep -E "a{3}" file.txt   # 匹配 "aaa"
grep -E "a{2,4}" file.txt # 匹配 "aa", "aaa", "aaaa"

(4) 转义字符 \

grep "\.txt" file.txt    # 匹配 ".txt"(而不是 "atxt"、"btxt" 等)
grep "\\" file.txt       # 匹配反斜杠 `\`(需要双重转义)

(5) 或操作 |

grep -E "cat|dog" file.txt  # 匹配 "cat" 或 "dog"
  1. grep 不同模式的区别
模式命令说明
基本正则表达式(BRE)grep “pattern”默认模式,*、^、$ 等元字符可用,但 +、?、 需要转义
扩展正则表达式(ERE)grep -E 或 egrep支持 +、?、{n,m} 等,无需转义
固定字符串模式grep -F 或 fgrep禁用正则表达式,直接匹配文字
http://www.xdnf.cn/news/5442.html

相关文章:

  • C++基本知识 —— 缺省参数·函数重载·引用
  • 蓝桥杯14届国赛 合并数列
  • 【Python 算法零基础 2.模拟 ⑤ 基于栈和队列】
  • 【JEECG 组件扩展】JSwitch开关组件扩展单个多选框样式
  • 【AI智能推荐系统】第八篇:可解释AI在推荐系统中的实践与价值
  • 深度优先与广度优先:如何用算法思维优化学习策略?
  • 250510-Linux离线配置N8N环境+屏蔽外网请求
  • python使用AES进行加密和解密
  • JavaSE基础
  • python: 为项目创建单独的虚拟环境步骤
  • QSS样式表的选择器
  • 蓝牙RFCOMM协议概述
  • 第二十一节:图像金字塔-高斯金字塔
  • TTS-Web-Vue系列:移动端侧边栏与响应式布局深度优化
  • OSCP备战-kioptrixvm3详细解法
  • [Java实战]Spring Boot 中Starter机制与自定义Starter实战(九)
  • Linux为啥会重新设置中断请求号与中断向量号之间的关系?
  • vector--OJ1
  • 【外网下载Jar包】
  • AI技术驱动SEO关键词智能布局
  • go程序编译成动态库,使用c进行调用
  • linux--------------Ext系列⽂件系统(下)
  • QOwnNotes:功能强大的跨平台笔记应用程序
  • FreeRTOS静态任务的创建、删除和软件定时器的开启(尚硅谷学习笔记)
  • 监控易一体化运维:任务计划管理的关键作用
  • 王道计算机网络知识点总结
  • 动态路由实现原理及前端控制与后端控制的核心差异
  • Linux:43线程封装与互斥lesson31
  • 前端Web开发HTML5+CSS3+移动web(基础-flex)
  • 基于Python的网络电子书阅读系统