grep (Global Regular Expression Print) 是 Linux 中强大的文本搜索工具,它使用正则表达式来搜索文本并输出匹配的行。
grep [选项] '正则表达式' 文件名
-i
:忽略大小写-v
:反向匹配,显示不匹配的行-n
:显示匹配行的行号-c
:统计匹配的行数-r
或 -R
:递归搜索目录-l
:只显示包含匹配项的文件名-w
:全词匹配-E
:使用扩展正则表达式 (等同于 egrep).
:匹配任意单个字符[abc]
:匹配 a、b 或 c[^abc]
:匹配除了 a、b、c 之外的字符[a-z]
:匹配任意小写字母[A-Z]
:匹配任意大写字母[0-9]
:匹配任意数字^
:匹配行首$
:匹配行尾\<
或 \b
:匹配单词开头\>
或 \b
:匹配单词结尾*
:匹配前一个字符 0 次或多次\+
:匹配前一个字符 1 次或多次 (需用 -E
或转义 \+
)?
:匹配前一个字符 0 次或 1 次 (需用 -E
或转义 \?
){n}
:精确匹配 n 次{n,}
:匹配至少 n 次{n,m}
:匹配 n 到 m 次\
:转义特殊字符|
:或操作 (需用 -E
)()
:分组 (需用 -E
)搜索包含 "error" 的行:
grep 'error' logfile.txt
忽略大小写搜索:
grep -i 'error' logfile.txt
搜索以 "error" 开头的行:
grep '^error' logfile.txt
搜索以数字结尾的行:
grep '[0-9]$' logfile.txt
搜索包含 "error" 或 "warning" 的行:
grep -E 'error|warning' logfile.txt
搜索 IP 地址:
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' logfile.txt
递归搜索目录:
grep -r 'function_name' /path/to/code/
统计匹配行数:
grep -c 'pattern' file.txt
使用 -A
, -B
, -C
显示上下文:
grep -A 2 -B 2 'error' logfile.txt # 显示匹配行前后各2行
使用 --color=auto
高亮显示匹配:
grep --color=auto 'pattern' file.txt
结合管道使用:
cat file.txt | grep 'pattern' | wc -l
搜索并替换 (结合 sed):
grep -l 'old_pattern' *.txt | xargs sed -i 's/old_pattern/new_pattern/g'
-E
选项可以启用扩展正则通过掌握这些基本正则表达式用法,你可以在 Linux 系统中高效地进行文本搜索和处理。