grep
是一个强大的命令行工具,用于在文本中搜索模式(通常是正则表达式)。它可以从文件或标准输入中搜索匹配的行,并将其输出到控制台。grep
是“Global Regular Expression Print”的缩写。
文章目录
基本语法
grep [选项] PATTERN [FILE...]
- PATTERN:要搜索的模式,可以是字符串或正则表达式。
- FILE:要搜索的文件。如果未指定文件,
grep
将从标准输入读取数据。
常用选项
-
-i
:忽略大小写进行搜索。grep -i "pattern" filename
-
-v
:反转匹配,输出不匹配的行。grep -v "pattern" filename
-
-r
或-R
:递归地搜索指定目录及其子目录。grep -r "pattern" /path/to/directory
-
-n
:显示匹配行的行号。grep -n "pattern" filename
-
-l
:仅显示包含匹配模式的文件的文件名。grep -l "pattern" *
-
-c
:仅显示匹配行的数量。grep -c "pattern" filename
-
-w
:仅匹配整个单词。grep -w "pattern" filename
-
-A [NUM]
:在匹配行之后显示指定数量的行。grep -A 3 "pattern" filename
-
-B [NUM]
:在匹配行之前显示指定数量的行。grep -B 3 "pattern" filename
-
-C [NUM]
:在匹配行前后各显示指定数量的行。grep -C 2 "pattern" filename
示例
-
从文件中搜索特定字符串:
grep "search_term" filename
-
从多个文件中搜索:
grep "search_term" file1 file2 file3
-
忽略大小写搜索:
grep -i "search_term" filename
-
递归搜索目录中的文件:
grep -r "search_term" /path/to/directory
-
显示匹配行的行号:
grep -n "search_term" filename
-
仅列出包含匹配模式的文件名:
grep -l "search_term" *
-
搜索时显示上下文行:
grep -C 3 "search_term" filename
正则表达式
grep
支持基本和扩展的正则表达式(ERE)。使用 -E
选项可以启用扩展正则表达式。这使得你可以使用元字符(如 +
、?
和 |
)进行更复杂的匹配。
grep -E "pattern1|pattern2" filename # 匹配 pattern1 或 pattern2
其他示例
示例 1: 基本文本搜索
查找文件 file.txt
中包含 “hello” 的行:
grep "hello" file.txt
示例 2: 忽略大小写
查找文件 file.txt
中包含 “hello”(不区分大小写)的行:
grep -i "hello" file.txt
示例 3: 递归查找
在目录 myfolder
中,递归地查找包含 “error” 的所有文件:
grep -r "error" myfolder/
示例 4: 显示行号
查找文件 file.txt
中所有包含 “hello” 的行,并显示行号:
grep -n "hello" file.txt
示例 5: 反向匹配
查找文件 file.txt
中不包含 “hello” 的所有行:
grep -v "hello" file.txt
示例 6: 仅显示文件名
在当前目录中查找包含 “test” 的文件名,不显示匹配的行:
grep -l "test" *
示例 7: 显示匹配行的数量
计算文件 file.txt
中包含 “hello” 的行数:
grep -c "hello" file.txt
示例 8: 搜索整个单词
查找文件 file.txt
中作为整个单词 “hello” 的行(即不匹配 “hello123” 或 “myhello”):
grep -w "hello" file.txt
示例 9: 显示上下文行
在文件 file.txt
中查找 “hello” 的同时,显示之前和之后各两行:
grep -C 2 "hello" file.txt
示例 10: 使用正则表达式
使用扩展的正则表达式查找文件 file.txt
中包含 “foo” 或 “bar” 的行:
grep -E "foo|bar" file.txt
示例 11: 查找以特定字符开头的行
查找文件 file.txt
中以 “Error:” 开头的行:
grep "^Error:" file.txt
示例 12: 查找以特定字符结尾的行
查找文件 file.txt
中以 “.txt” 结尾的行:
grep "\.txt$" file.txt
示例 13: 使用多个条件
查找文件 file.txt
中包含 “hello” 且行号大于 3 的行(结合 -n
使用):
grep -n "hello" file.txt | awk -F: '$1 > 3'
示例 14: 处理管道输出
结合其他命令使用 grep
,例如查找正在运行的进程中包含 “ssh” 的进程:
ps aux | grep "ssh"
示例 15: 从多个文件中查找
在多个文件中查找包含 “example” 的行:
grep "example" file1.txt file2.txt file3.txt
扩展示例:查找差异
假设有两个文件 old.txt
和 new.txt
,找出新文件中引入的变化:
diff old.txt new.txt | grep ">"
总结
grep
是一个非常强大的工具,适用于文本搜索和过滤。其高效性和灵活性使得它在编程、系统管理和数据分析等领域非常受欢迎