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 是一个非常强大的工具,适用于文本搜索和过滤。其高效性和灵活性使得它在编程、系统管理和数据分析等领域非常受欢迎
4万+

被折叠的 条评论
为什么被折叠?



