Linux “grep“ 命令

1. 目标

本文主要介绍 Linux "grep" 命令:用于查找文件里符合条件的字符串或正则表达式。

2. grep 命令

"grep" 命令的基本语法是:

复制代码
grep [options] pattern [files]
  • pattern - 表示要查找的字符串或正则表达式。

  • files - 表示要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据。

常用参数说明:

  • -c : 打印与模式匹配的行数;

  • -h : 显示匹配的行,但不显示文件名;

  • -i : 忽略字符大小写的差别;

  • -l : 只显示文件名列表;

  • -n : 显示匹配的行及其行号;

  • -v : 显示不包含匹配文本的所有行;

  • -e exp : 指定字符串作为查找文件内容的样式;

  • -f file : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式;

  • -E : 将样式为延伸的正则表达式来使用;

  • -w : 显示全匹配整个单词;

  • -o : 只打印匹配行的匹配部分、每个匹配部分都在单独的输出行上;

  • -A n : 打印搜索行和结果后的 n 行;

  • -B n : 打印搜索行和结果前的 n 行;

  • -C n : 打印搜索行及其前后的 n 行;

2.1 示例

备注: 示例文本文件:text.txt

复制代码
root@dev:~/linux# cat > text.txt 
-------------------------------------------------------------------
unix is great os. unix was developed in Bell labs.
learn operating system.
Unix linux which one you choose.
uNix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

(1)不区分大小写搜索

通过 -i 选项,可以在给定文件中搜索不区分大小写的字符串。例如:匹配 "UNIX"、"Unix"、"unix "等词。

复制代码
root@dev:~/linux# grep -i "UNix"  text.txt 
-------------------------------------------------------------------
unix is great os. unix was developed in Bell labs.
Unix linux which one you choose.
uNix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

(2)显示匹配次数

找出与给定字符串/模式匹配的行数。

复制代码
root@dev:~/linux# grep -c "unix" text.txt 
-------------------------------------------------------------------
2

(3)显示与模式匹配的文件名

只需显示包含给定字符串/模式的文件即可。

复制代码
root@dev:~/linux# grep -l "unix" *

或者

root@dev:~/linux# grep -l "unix" text.txt text1.txt text2.txt

输出:
text.txt

(4)检查文件中的整个字符串

默认情况下,grep 会匹配给定的字符串/模式,即使该字符串/模式在文件中是子串。grep 的 -w选项使其只匹配整个单词。

复制代码
root@dev:~/linux# grep -w "unix" text.txt 
-------------------------------------------------------------------
unix is great os. unix was developed in Bell labs.
uNix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

(5)只显示匹配的模式 默认情况下,grep 会显示匹配字符串的整行。我们可以使用 -o 选项让 grep 只显示匹配的字符串。

复制代码
root@dev:~/linux# grep -o "unix" text.txt 
-------------------------------------------------------------------
unix
unix
unix
unix
unix

(6)使用 grep -n 输出时显示行号

显示匹配行的文件行号。

复制代码
root@dev:~/linux# grep -n "unix" text.txt 
-------------------------------------------------------------------
1:unix is great os. unix was developed in Bell labs.
4:uNix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

(7)反向模式匹配

使用 -v 选项可以显示与指定搜索字符串模式不匹配的行。

复制代码
root@dev:~/linux# grep -v -n "unix" text.txt 
-------------------------------------------------------------------
2:learn operating system.
3:Unix linux which one you choose.

(8)匹配以字符串开头的行

^ 正则表达式指定一行的开头。在 grep 中使用它可以匹配以给定字符串或正则匹配开头的行。

复制代码
root@dev:~/linux# grep "^unix" text.txt 
-------------------------------------------------------------------
unix is great os. unix was developed in Bell labs.

(9)匹配以字符串结尾的行

$ 正则表达式指定一行的结尾。在 grep 中可以使用它来匹配以给定字符串或正则表达式结尾的行。

复制代码
root@dev:~/linux# grep "labs.$" text.txt 
-------------------------------------------------------------------
unix is great os. unix was developed in Bell labs.

(10)使用 -e 选项指定表达式

使用 -e 选项指定表达式,可多次使用。

复制代码
root@dev:~/linux# grep -e "unix" -e "great" -e "os"  text.txt 
-------------------------------------------------------------------
unix is great os. unix was developed in Bell labs.
Unix linux which one you choose.
uNix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

(11)-f 文件选项 查找符合规则条件的文件内容,格式为每行一个规则样式

复制代码
root@dev:~/linux# cat > pattern.txt
-------------------------------------------------------------------
unix
learn

root@dev:~/linux# grep -f pattern.txt  text.txt 
-------------------------------------------------------------------
unix is great os. unix was developed in Bell labs.
learn operating system.
uNix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

(12)打印文件中的 n 个特定行

-A 打印搜索到的行和结果之后的 n 行,-B 打印搜索到的行和结果之前的 n 行,-C 打印搜索到的行和结果之后及之前的 n 行。

语法:

复制代码
$grep -A[NumberOfLines(n)] [search] [file]  

$grep -B[NumberOfLines(n)] [search] [file]  

$grep -C[NumberOfLines(n)] [search] [file]

-A 示例:

复制代码
root@dev:~/linux# grep -A1 great text.txt 
-------------------------------------------------------------------
unix is great os. unix was developed in Bell labs.
learn operating system.

root@dev:~/linux# grep -A2 great text.txt 
-------------------------------------------------------------------
unix is great os. unix was developed in Bell labs.
learn operating system.
Unix linux which one you choose.

-B 示例:

复制代码
root@dev:~/linux# grep -B1 choose text.txt 
-------------------------------------------------------------------
learn operating system.
Unix linux which one you choose.

root@dev:~/linux# grep -B2 choose text.txt 
-------------------------------------------------------------------
unix is great os. unix was developed in Bell labs.
learn operating system.
Unix linux which one you choose.

-C 示例:

复制代码
root@dev:~/linux# grep -C1 choose text.txt 
-------------------------------------------------------------------
learn operating system.
Unix linux which one you choose.
uNix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.

(13)目录中递归搜索

-R 指定目录下所有文件中递归搜索。

语法:

复制代码
grep -R [Search] [directory]

示例:

复制代码
root@dev:~/linux# grep -iR operating /root
-------------------------------------------------------------------
Binary file /root/proxy-agent.v0.6.tar matches
/root/get-docker.sh:                    echo "ERROR: Unsupported operating system 'macOS'"
Binary file /root/frontend.tar matches
/root/linux/text.txt:learn operating system.
  • -i 不区分大小写搜索字符串;

  • -R 递归检查目录中的所有文件;

(14)-E 正则表达式

复制代码
root@dev:~/linux# grep -E "^[A-Z][a-z]" text.txt 
-------------------------------------------------------------------
Unix linux which one you choose.

(15)-o 输出文件中匹配到的部分

复制代码
root@dev:~/linux# grep -o -E "[A-Z]" text.txt 
-------------------------------------------------------------------
B
U
N
L
相关推荐
辉灰笔记9 小时前
MySQL8 意外关机/误移data目录导致服务启动失败 PID报错/权限报错 修复文档
linux·数据库·mysql·centos
ylscode10 小时前
CVE-2026-31694 漏洞深度分析:Linux 内核 FUSE 组件存在本地提权风险,普通用户可直取 root 权限
linux·运维·服务器
无足鸟ICT11 小时前
【RHCA+】bash命令
linux·开发语言·bash
weixin_3077791312 小时前
Linux下Docker Compose里运行的MySQL数据库故障诊断Shell脚本
linux·运维·mysql·docker·自动化
小生不才yz12 小时前
Shell脚本精读 · S14-02 | 脚本模板:从 20 行工具到可维护项目
linux
x-cmd12 小时前
Linus 9 年前说「模糊测试有效」——今天已成 OSS-Fuzz 时代铁律
linux·ai·rust·开源·自动化·agent·安全性测试
六点_dn13 小时前
Linux学习笔记-chmod命令
linux·笔记·学习
编程令我快乐13 小时前
windows单次传linux文件太大
linux·运维·服务器
AOwhisky13 小时前
Python 基础语法(上篇 + 下篇)——综合自测题
linux·windows·python
浮江雾13 小时前
Flutter第四节------核心概念学习笔记:从基础语法到异步编程
linux·服务器·开发语言·笔记·flutter·入门·基础