grep 是 Unix/Linux 系统中一个强大的文本搜索工具,用于在文件或标准输入中查找与给定模式匹配的行。它会根据你指定的模式(通常是正则表达式)来过滤输入并显示符合条件的行。以下是 grep 命令的详细解释,包括常用选项和用法示例。

基本用法:

grep [选项] 模式 文件
  • 模式:可以是字符串或正则表达式,用来匹配你想要查找的内容。
  • 文件:表示要查找的文件,如果没有指定文件,则默认从标准输入(如键盘输入或管道)读取。

常用选项:

  • -i:忽略大小写,例如:grep -i "pattern" file.txt
  • -v:反转匹配,即显示不匹配的行,例如:grep -v "pattern" file.txt
  • -r-R:递归查找目录中的文件,例如:grep -r "pattern" /path/to/directory/
  • -n:显示匹配行的行号,例如:grep -n "pattern" file.txt
  • -l:显示匹配到的文件名,而不显示具体内容,例如:grep -l "pattern" *.txt
  • -c:统计匹配的行数,例如:grep -c "pattern" file.txt
  • -o:只输出匹配到的部分,而不是整行,例如:grep -o "pattern" file.txt
  • -A N:显示匹配行以及匹配行后 N 行,例如:grep -A 2 "pattern" file.txt
  • -B N:显示匹配行以及匹配行前 N 行,例如:grep -B 2 "pattern" file.txt
  • -C N:显示匹配行及其前后 N 行,例如:grep -C 2 "pattern" file.txt
  • -w:匹配整词,确保匹配的是整个单词,而不是单词的一部分,例如:grep -w "word" file.txt
  • --color:高亮显示匹配的部分,一般系统默认启用,例如:grep --color "pattern" file.txt

例子:

  1. 基本查找:

    grep "hello" file.txt

    查找 file.txt 中包含 "hello" 的行。

  2. 递归查找:

    grep -r "hello" /path/to/directory/

    递归查找目录 /path/to/directory/ 中所有文件包含 "hello" 的行。

  3. 忽略大小写查找:

    grep -i "HELLO" file.txt

    忽略大小写查找 "HELLO" 或 "hello" 或任何大小写组合的匹配项。

  4. 显示匹配及其上下文:

    grep -C 3 "error" logfile.txt

    查找 "error" 并显示匹配行及其前后 3 行。

  5. 统计匹配的行数:

    grep -c "error" logfile.txt

    统计 logfile.txt 中包含 "error" 的行数。

  6. 只显示匹配到的文件名:

    grep -l "error" *.log

    在当前目录下的所有 .log 文件中查找包含 "error" 的文件,并只显示文件名。

  7. 排除包含特定模式的行:

    grep -v "warning" logfile.txt

    显示 logfile.txt 中不包含 "warning" 的行。

  8. 匹配整词:

    grep -w "is" file.txt

    只匹配单词 "is",不会匹配 "this" 或 "inside"。

  9. 查找多个模式(使用正则表达式):

    grep -E "pattern1|pattern2" file.txt

    使用 -E 选项启用扩展正则表达式,查找匹配 "pattern1" 或 "pattern2" 的行。

  10. 从命令输出中过滤:

    ps aux | grep "nginx"

    通过管道过滤 ps aux 的输出,显示包含 "nginx" 的进程信息。

正则表达式支持:

grep 支持基本的和扩展的正则表达式模式匹配。以下是一些常用的正则表达式示例:

  • ^pattern:匹配以 pattern 开头的行。
  • pattern$:匹配以 pattern 结尾的行。
  • .:匹配任意单个字符。
  • *:匹配前面的字符任意次。
  • [abc]:匹配 ab,或 c 中的任意一个字符。
  • [^abc]:匹配不包含 abc 的字符。

例如:

grep "^start" file.txt

查找以 "start" 开头的行。

grep "end$" file.txt

查找以 "end" 结尾的行。

实际使用示例:

cat /userdata/log/mcu/message | grep Version
最后修改:2024 年 10 月 10 日
如果觉得我的文章对你有用,请随意赞赏