linux grep命令使用详解

linux grep命令使用详解linux 文本分析工具 grep 命令使用详解

前言

在linux命令行中,经常需要对当前获取的一堆数据进行过滤、提取和分析,其中grep命令是其中非常重要的命令之一,比如,在生产环境服务器上,经常使用到下面这个命令

ps -ef | grep java 

显然,grep的作用就是帮助筛选出那些运行中的java进程

grep 作用

文本搜索工具,根据用户指定的“模式”(过滤条件),对目标文本逐行进行匹配,并打印输出匹配到的行;

模式:由正则表达式的元字符串及文本字符串所编写的过滤条件

grep 完整语法结构

grep [options] [pattern] file 命令 参数 匹配模式 文件数据 

上述语法结构中,经常可配合下面的参数一起使用

-i : 忽略大小写; -o : 仅显示匹配到目标字符串; -v : 显示不能被匹配到的字符串(反转); -E : 支持使用扩展的正则表达式字符串; -q : 静默模式,不输出任何信息 

grep命令是linux系统命令中最重要的命令之一,功能是从文本文件,或者管道数据流中筛选出匹配到的行或数据,如果再配合正则表达式,功能将十分强大;

grep 命令里的匹配模式,就是你想要找出来的数据,可以是普通的文字符号,也可以是正则表达式;

grep常用的参数总结

参数选项 解释说明
-V 排除匹配结果
-n 显示匹配行与行号
-i 不区分大小写
-c 只统计匹配行数
-E 使用egrep命令
-o 只输出匹配内容
-w 只输出过滤的单词
-F 不适用正则表达式
-l 列出包含匹配项的文件名
-L 列出不包含匹配项的文件名

grep中常用正则表达式

一、基本常用正则表达式汇总

表达式 解释说明
^ 用于模式最左侧,如 “^yu” 即匹配以yu开头的单词
$ 用于模式最右侧,如 “yu$” 即匹配以yu结尾的单词
^$ 组合符,表示空行
. 匹配任意一个且只有一个字符,不能匹配空行
| 转义字符
* 重匹配前一个字符连续出现0次或1次以上
.* 匹配任意字符
^.* 组合符,匹配任意多个字符开头的内容
.*$ 组合符,匹配任意多个字符结尾的内容
[abc] 匹配 [] 内集合中的任意一个字符,a或b或c,也可以写成 [ac]
[^abc] 匹配除了 ^后面的任意一个字符,a或b或c,[]内 ^ 表示取反操作

案例演示

素材准备,将系统中账户密码输出到一个pwd.txt文件中

在这里插入图片描述

1、找出names.txt中的注释行,并过滤空行

grep "^#" names.txt -v | grep "^$" -v 

在这里插入图片描述

2、输出以h开头的行,不区分大小写

这里重点考察对 “^” 的使用

grep -i "^h" names.txt 

在这里插入图片描述
3、输出以/bin/bash结尾的行

grep -n "bin/bash$" pwd.txt 

在这里插入图片描述
4、过滤非空的行

grep '^$' names.txt -v 

在这里插入图片描述

5、匹配文本中至少包含一个 is 的行

grep -i ".is" names.txt 

在这里插入图片描述

6、匹配文本中包含数字的行

考察对 [abc] 类似的用法

  • [a-z] 匹配所有小写单个字母
  • [A-Z] 匹配所有大写单个字母
  • [a-zA-Z] 匹配所有单个大小写字母
  • [0-9] 匹配所有单个数字
  • [0-9a-zA-Z] 匹配所有数字和字母
grep "[0-9]" names.txt 

在这里插入图片描述

二、扩展正则表达式使用

表达式 解释说明
+ 表示匹配前一个字符一次或多次
? 表示匹配前一个字符0次或1次
() 将一个或多个字符捆绑在一起,当作整体进行处理
{n,m} 匹配目标字符,最少n次,最多m次
{n,m} 匹配目标字符,最少n次,上不封顶
> 匹配位于 目标字符开头的字符串,即截止到 < 前面的字符为止,精确匹配
< 匹配位于 目标字符结尾的字符串,即截止到 > 前面的字符为止,精确匹配

案例演示

1、筛选前一个字符包含e的的文本行

grep -E 'e+' names.txt 

在这里插入图片描述

2、筛选前一个字符包含he的出现0次或者1次的文本行

grep -E 'he?' names.txt 

在这里插入图片描述

3、找出文本中包含 “hi” 或 “java” 的文本行

grep -E -i 'hi|java' names.txt 

在这里插入图片描述

4、找出文本中包含 good和glad的文本

grep -E 'g(oo|la)d' test1.txt 

在这里插入图片描述

5、找出文本中的 o 字符出现的次数最少2次,最多7次的文本行

考察dui {n,m}的用法,表示匹配的字符最少n次,最多m次

grep -E 'o{2,7}' test1.txt 

在这里插入图片描述

6、找出文本中的 o 字符出现的次数最少3次

grep -E 'o{3,}' test1.txt 

在这里插入图片描述

7、找出文本中root用户和zcy用户

如果像下面这样直接使用grep命令查找,可以看到zcy这个字符串开头的账户有多个,显然不符合预期

grep -E '^(root|zcy)' pwd.txt 

在这里插入图片描述

这就需要使用到 > 这个表达式了,改进之后,再次执行就符合预期的目标了

grep -E '^(root|zcy)\>' pwd.txt 

在这里插入图片描述

三、常用grep 正则表达式参数汇总

下面提供一些grep相关的可选参数,方便遇到问题时快速查阅

表达式 解释说明
-a 或 –text 不要忽略二进制的数据。
-A
<显示行数>
或 –after-context=
<显示行数>
除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b 或 –byte-offset 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B
<显示行数>
或 –before-context=
<显示行数>
除了显示符合样式的那一行之外,并显示该行之前的内容。
-c 或 –count 计算符合样式的列数。
-C
<显示行数>
或 –context=
<显示行数>
或-
<显示行数>

除了显示符合样式的那一行之外,并显示该行之前后的内容
-d
<动作>
或 –directories=
<动作>
当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作
-e
<范本样式>
或 –regexp=
<范本样式>
指定字符串做为查找文件内容的样式。
-E 或 –extended-regexp 将样式为延伸的正则表达式来使用。
-f
<规则文件>
或 –file=
<规则文件>
指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F 或 –fixed-regexp 将样式视为固定字符串的列表。
-G 或 –basic-regexp 将样式视为普通的表示法来使用。
-h 或 –no-filename 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H 或 –with-filename 在显示符合样式的那一行之前,表示该行所属的文件名称。
-i 或 –ignore-case 忽略字符大小写的差别。
-l 或 –file-with-matches 列出文件内容符合指定的样式的文件名称。
-L 或 –files-without-match 列出文件内容不符合指定的样式的文件名称。
-n 或 –line-number 在显示符合样式的那一行之前,标示出该行的列数编号。
-o 或 –only-matching 只显示匹配PATTERN 部分。
-q 或 –quiet或–silent 不显示任何信息。
-r 或 –recursive 此参数的效果和指定”-d recurse”参数相同
-s 或 –no-messages 不显示错误信息
-v 或 –invert-match 显示不包含匹配文本的所有行
-V 或 –version 显示版本信息。
-w 或 –word-regexp 只显示全字符合的列
-x –line-regexp 只显示全列符合的列
-y 此参数的效果和指定”-i”参数相同

其他grep相关案例总结

1、统计出zcy 账户出现的次数

grep -c '^zcy' pwd.txt 

在这里插入图片描述

2、匹配zcy这个账户,匹配结果最多展示2条

grep -m 2 '^zcy' pwd.txt 

在这里插入图片描述

3、匹配多文件下,存在某个字符串的内容

grep "zcy" ./f1/pwd.txt ./f2/word.txt 

在这里插入图片描述

4、找出系统密码中那些仅包含2位数或者3位数的内容

grep -n -E "\<[0,9]{2,3}\>" ./pwd.txt 

在这里插入图片描述

5、匹配那些以大写字母开头的行

grep -n -E "^[A-Z]" names.txt 

在这里插入图片描述

6、从多个账户中匹配出任意一个符合要求的

grep -n -E "^(root|zcy|nobidy)\>" ./pwd.txt 

在这里插入图片描述

7、递归找出当前root目录下所有文件中包括zcy字符的文件

grep -r '^zcy' /root 

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178433.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午5:18
下一篇 2026年3月26日 下午5:19


相关推荐

  • Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转

    Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转本文目前提供:LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转文中都使用的时区都是东8区,也就是北京时间。这是为了防止服务器设置时区错误时导致时间不对,如果您是其他时区,请自行修改1.LocalDateTime获取毫秒数​//获取秒数Longsecond=LocalDateT…

    2022年4月30日
    56
  • vue组件化的理解_vue引入组件的方式有几种

    vue组件化的理解_vue引入组件的方式有几种前言有时候有一组html结构的代码,并且这个上面可能还绑定了事件。然后这段代码可能有多个地方都被使用到了,如果都是拷贝来拷贝去,很多代码都是重复的,包括事件部分的代码都是重复的。那么这时候我们就可以

    2022年7月30日
    11
  • oracle11g安装图解「建议收藏」

    oracle11g安装图解「建议收藏」Oracle11g安装:**一、软件需求安装CentOS6.5的服务器一台Oracle11g安装介质:linux.x64_11gR2_database_1of2.ziplinux.x64_11gR2_database_2of2.zip命令行客户端工具xshell、crt或者putty图形界面客户端工具Xming二、系统配置检查1.内存检查SSHSecureShell的命令行窗口,执行[root@localhost~]#grepMemTotal/proc/meminfoM

    2026年2月12日
    5
  • Rewritecond介绍[通俗易懂]

    Rewritecond介绍[通俗易懂]RewriteCondSyntax:RewriteCondTestStringCondPattern[flags]  RewriteCond指令定义一条规则条件。在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当自身的模板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理。  TestString是一个字符串,除了包含普通的

    2022年6月13日
    24
  • ubuntu安装qt教程_配置溶液的步骤

    ubuntu安装qt教程_配置溶液的步骤Qt是一个跨平台的C++图形用户界面库,我们平时所说所使用的Qt,准确的来说是它的GUI编程部分。Qt提供给应用程序开发者建立图形用户界面所需要的功能,并且Qt很容易扩展。基本上,Qt和XWindow上的Motif、Openwin、GTK等图形界面库和Windows平台上的MFC、OWL、VCl以及ATl是相同类型的东西。1.下载Qtqt下载地址2.安装Qt本人安装的是qt-opensource-linux-x64-5.9.5.run打开终端,输入命令:“sudochmod-R777q

    2022年8月31日
    4
  • 挂载磁盘如何使用,挂载磁盘详细步骤教程

    挂载磁盘如何使用,挂载磁盘详细步骤教程

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号