1. Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红)。
grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2. grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被
看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
3. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返
回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
4. egrep = grep -E:扩展的正则表达式 (除了\< , \> , \b 使用其他正则都可以去掉\)
5. fgrep=grep -F:不支持正则表达式,可以过滤普通的字符串
### 文本三剑客之grep及正则表达式
#### 1. grep 命令简介
- **定义**:`grep` 是 Linux 和 Unix 系统中的一种强大的文本搜索工具,它能够使用正则表达式来搜索文本,并将匹配的行打印出来。其全称是 Global Regular Expression Print,意为全局正则表达式版本。
- **功能**:在文件中搜索指定的模式或字符串,可以处理单个或多个文件,并且输出匹配的行。
- **权限**:所有用户都有权限使用 `grep`。
#### 2. grep 的工作方式
- **搜索模板**:`grep` 在一个或多个文件中搜索字符串模板。如果模板包含空格,则需要引用。模板后面的字符串被视为文件名。
- **输出**:搜索结果会被发送到标准输出,不会影响原始文件的内容。
- **自动化处理**:由于 `grep` 可以通过返回不同的状态值来指示搜索状态(如成功匹配返回 0,未匹配返回 1,文件不存在返回 2),因此非常适合用于 shell 脚本中进行自动化文本处理。
#### 3. grep 的变体
- **egrep (grep -E)**:使用扩展的正则表达式(Extended Regular Expressions, ERE)。这使得用户可以在正则表达式中使用更多语法,例如 `{n,m}` 和无限重复符 `*`、`+` 等,但需要特别注意的是,在 ERE 中 `\b`、`\B`、`\<` 和 `\>` 等边界匹配字符需要保持原有的反斜杠转义。
- **fgrep (grep -F)**:固定字符串搜索,不支持正则表达式。适合用于查找固定的字符串,而非模式匹配。
#### 4. grep 的实战演示
- **示例一**:使用 `grep` 对磁盘利用率进行倒序排序。
```bash
[root@ansibledata]# df | grep /dev/sd | tr -s "" "%" | cut -d "%" -f 5 | sort -nr
```
这条命令首先使用 `df` 获取磁盘使用情况,然后使用管道 (`|`) 将输出传递给 `grep` 命令以过滤 `/dev/sd` 分区的信息。接下来使用 `tr` 命令去除多余的空格,再使用 `cut` 命令提取百分比列,最后使用 `sort` 命令按数值逆序排列。
- **选项说明**:
- `--color=auto`:对匹配到的文本着色显示。
- `-v`:显示不被 pattern 匹配到的行。
- `-i`:忽略字符大小写。
- `-n`:显示匹配的行号。
- `-c`:统计匹配的行数。
- `-o`:仅显示匹配到的字符串。
- `-q`:静默模式,不输出任何信息。
- `-A #`:显示匹配行之后的 # 行。
- `-B #`:显示匹配行之前的 # 行。
- `-C #`:显示匹配行前后各 # 行。
- `-e`:实现多个选项间的逻辑 or 关系。
- `-w`:匹配整个单词。
- `-E`:使用 ERE。
- `-F`:相当于 `fgrep`,不支持正则表达式。
- `-f file`:根据模式文件处理。
#### 5. 正则表达式
- **定义**:正则表达式 (Regular Expressions, REGEXP) 是一种由特殊字符和文本字符组成的模式。其中一些字符被称为元字符,具有特殊的含义,用于控制或通配。
- **支持程序**:`grep`, `sed`, `awk`, `vim`, `less`, `nginx`, `varnish` 等。
- **类型**:
- **基本正则表达式 (BRE)**:基本正则表达式的语法较简单,不支持某些复杂的正则表达式特性。
- **扩展正则表达式 (ERE)**:扩展正则表达式支持更广泛的语法,使得编写复杂的模式更加容易。
#### 6. 实战案例
- **示例二至示例六**:文章中并未给出具体的示例代码,但我们可以假设这些示例可能会涉及 `grep` 在实际场景中的应用,例如:
- 使用 `grep` 结合其他命令(如 `awk` 或 `sed`)来提取特定格式的日志信息。
- 在大量的文本文件中查找特定的关键词或短语。
- 进行文本文件的初步分析,例如统计某个单词出现的次数等。
#### 7. 总结
`grep` 作为一种强大的文本搜索工具,对于日常的文本处理任务至关重要。掌握其基本用法和高级特性可以帮助用户高效地完成多种文本处理任务。无论是简单的字符串搜索还是复杂的模式匹配,`grep` 都能提供灵活的解决方案。同时,配合正则表达式的使用,可以极大地提高文本处理的效率和准确性。