grep是Linux/Unix系统中一个强大的文本搜索工具,全称是"Global Regular Expression Print"。以下是grep的主要用法:
grep [选项] 模式 [文件...]
-i
:忽略大小写
bash
grep -i "error" logfile.txt
-v
:反向匹配,显示不包含模式的行
bash
grep -v "success" results.log
-w
:全词匹配
bash
grep -w "word" document.txt
-x
:整行匹配
bash
grep -x "exact line" file.txt
-n
:显示匹配行的行号
bash
grep -n "pattern" file.txt
-c
:统计匹配的行数
bash
grep -c "error" logfile.txt
-l
:只显示包含匹配项的文件名
bash
grep -l "main" *.c
-L
:显示不包含匹配项的文件名-o
:只输出匹配的部分
bash
grep -o "[0-9]\+" data.txt
-A n
:显示匹配行及其后n行
bash
grep -A 3 "exception" log.txt
-B n
:显示匹配行及其前n行
bash
grep -B 2 "fatal" error.log
-C n
:显示匹配行及其前后各n行
bash
grep -C 2 "warning" system.log
-r
或 -R
:递归搜索目录
bash
grep -r "function" /path/to/dir/
--include
:指定搜索的文件模式
bash
grep -r --include="*.py" "import" .
--exclude
:排除特定文件模式
bash
grep -r --exclude="*.tmp" "pattern" .
基本正则表达式:
grep "a.*b" file.txt # 匹配a和b之间有任意字符的行
扩展正则表达式(使用-E
或egrep
):
grep -E "error|warning" logfile.txt
常用正则表达式:
^
:行首$
:行尾.
:任意单个字符*
:前导字符零次或多次[ ]
:字符集合[^ ]
:不在字符集合中的字符搜索多个文件:
grep "pattern" file1.txt file2.txt
使用管道与其他命令结合:
ps aux | grep "nginx"
统计匹配次数:
grep -o "word" file.txt | wc -l
搜索压缩文件:
zgrep "error" /var/log/syslog.*.gz
高亮显示匹配结果:
grep --color=auto "pattern" file.txt
使用固定字符串(禁用正则):
grep -F "$var" file.txt
grep是一个非常灵活的工具,通过组合不同的选项可以满足各种文本搜索需求。