grep命令

2023-11-18

grep,全称是global regular expressions print
功能就是查找匹配模式的行
grep对文本内容的处理是以行为单位,输出也是输出匹配的行。

也可以使用两个变种程序egrep和fgrep。
egrep与grep -E相同。
fgrep与grep -F相同。

一、语法格式

grep [选项]… 模式 [文件]…
例如:grep -i ‘hello world’ menu.h main.c

二、选项

应用于模式的选项

-E, --extended-regexp     <模式> 是扩展正则表达式
-F, --fixed-strings       <模式> 是字符串
-G, --basic-regexp        <模式> 是基本正则表达式
-P, --perl-regexp         <模式> 是 Perl 正则表达式
-e, --regexp=<模式>       用指定的<模式>字符串来进行匹配操作
-f, --file=<文件>         从给定<文件>中取得<模式>
-i, --ignore-case         在模式和数据中忽略大小写
    --no-ignore-case      不要忽略大小写(默认)
-w, --word-regexp         强制<模式>仅完全匹配字词
-x, --line-regexp         强制<模式>仅完全匹配整行
-z, --null-data           数据行以一个 0 字节结束,而非换行符

输出控制:

-m, --max-count=<次数>    得到给定<次数>次匹配后停止
-b, --byte-offset         输出的同时打印字节偏移
-n, --line-number         输出的同时打印行号
    --line-buffered       每行输出后刷新输出缓冲区
-H, --with-filename       为输出行打印文件名
-h, --no-filename         输出时不显示文件名前缀
    --label=<标签>        将给定<标签>作为标准输入文件名前缀
-o, --only-matching       只显示行中非空匹配部分
-q, --quiet, --silent     不显示所有常规输出
    --binary-files=TYPE   设定二进制文件的 TYPE(类型);
                          TYPE可以是'binary'、'text'、'without-match'
-a, --text                等同于 --binary-files=text
-I                        等同于 --binary-files=without-match
-d, --directories=ACTION  读取目录的方式;
                          ACTION 可以是`read', `recurse',或`skip'
-D, --devices=ACTION      读取设备、先入先出队列、套接字的方式;
                          ACTION 可以是`read'或`skip'
-r, --recursive           等同于--directories=recurse
-R, --dereference-recursive       同上,但遍历所有符号链接
    --include=GLOB        只查找匹配 GLOB(文件模式)的文件
    --exclude=GLOB        跳过匹配 GLOB 的文件
    --exclude-from=FILE   跳过所有匹配给定文件内容中任意模式的文件
    --exclude-dir=GLOB    跳过所有匹配 GLOB 的目录
-L, --files-without-match  只打印没有匹配上的<文件>的名称
-l, --files-with-matches  只打印有匹配的<文件>的名称
-c, --count               只打印每个<文件>中的匹配行数目
-T, --initial-tab         行首制表符对齐(如有必要)
-Z, --null                在<文件>名最后打印空字符

三、参数

1.模式字符串:要查找的字符串。
可以包括多个模式字符串,使用换行符分隔。
为了避免shell先对特殊字符进行处理,一般要用单引号把模式字符串括起来。
2.文件名

四、示例

1.-F选项原样字符串搜索

grep -F 'hello world' test.txt
搜索test.txt文件中,包含'hello world'的行

2.-e选项通过正则表达式搜索
关于正则表达式参考正则表达式
如果不指定选项,默认就是此选项。
-e使用的正则表达式是基本正则表达式。也就是说,像?+{}这些都要在前面加转义符\

grep -e 't[ae]st' test.txt
在test.txt中查找包含tast或test的行

grep '[^a-z]oo' test.txt
在test.txt中查找包含Xoo的行,其中X是一个非a到z的字符

grep '^the' test.txt
在test.txt中查找以the开头的行

grep '^$' test.txt
在test.txt中查找空行

cat test.txt | grep '^[^u]'
输出非u开头的行

grep '<[^>]*>' test.txt
匹配一对括号

grep '.+' test.txt
匹配任意字符后面跟一个+

grep '.\+' test.txt
匹配长度大于0的行

3.-E选项通过扩展正则表达式搜索
正则表达式分为基本正则表达式和扩展正则表达式,但是grep默认只支持基本正则表达式,如果要用扩展正则表达式,需要使用grep -E或者egrep。

egrep '.+' test.txt
匹配长度大于0的行

egrep 'gd|good' test.txt
在test.txt中查找包含gd或good的行

egrep 'g(la|oo)d' test.txt
在test.txt中查找包含glad或good的行

egrep 'A(xyz)+C' test.txt
在test.txt中查找包含AXC的行,其中X是一个或一个以上的'xyz'字符串

egrep 'o{2}' test.txt
在test.txt中查找包含连续两个o的行

egrep '[a-z]{7}' *.txt
在当前目录下所有.txt文件中查找包含连续7个小写字母的字符串的行

ip address | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'
查找包含ip地址的行

ip address | grep -E '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}'
查找包含ip地址的行

4.-c选项只输出行数

grep -c 'CLERK' emp.data
输出包含CLERK的行的数量

5.-f选项从文件中读取模式

cat test.txt | grep -f test2.txt
输出test.txt文件中含有从test2.txt文件中模式的行

6.-n选项显示行号

grep -n 'linux' test.txt

7.-v选项查找不包含模式的行

grep -v 'abc' test.txt
在test.txt中查找不包含abc的行

8.-o选项只显示匹配的部分,而不是整行

grep -o 'linux' test.txt

9.-I(大写的i)选项不查找二进制文件

find . -type f -print0 | xargs -0 grep -I 'xxx'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

grep命令 的相关文章

  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • waitpid() 的作用是什么?

    有什么用waitpid 它通常用于等待特定进程完成 或者如果您使用特殊标志则更改状态 基于其进程 ID 也称为pid 它还可用于等待一组子进程中的任何一个 无论是来自特定进程组的子进程还是当前进程的任何子进程 See here http l
  • 如何在 Perl 脚本中加密或隐藏密码?

    我正在研究 Perl 脚本 它使用Expect http search cpan org dist Expect通过 telnet 登录到远程计算机 不要问 必须使用 telnet 我还根据需要执行 perforce p4 登录操作 并使用
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 如何忽略 perl 中的“证书验证失败”错误?

    我想访问一个无法验证证书的网站 我正在使用 WWW Mechanize 获取请求 那么如何忽略这一点并继续连接到该网站呢 use IO Socket SSL qw use WWW Mechanize qw my mech WWW Mecha
  • Urwid:使光标不可见

    我正在使用 urwid 它是一个用于在 ncurses 中设计终端用户界面的 Python 框架 但有一件事我在 urwid 中无法做到 而这在 Curses 中很容易做到 使光标不可见 现在 选择按钮时光标是可见的 而且看起来很丑 有办法
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器
  • 打包/解包 - 小端 - 64 位 - 问题

    usr bin env perl use warnings use 5 012 my var 1 lt lt 31 say unpack B pack N var 10000000000000000000000000000000 我怎样才能
  • 如何允许应用程序声明“https”方案 URI? (即如何从 https URL 打开桌面应用程序?)

    目前我正在尝试为 OAuth 2 0 授权流程创建一个客户端 实际上是一个本机应用程序 并且在规范中就在这儿 https www rfc editor org rfc rfc8252 section 7 2据说有 3 种方法来处理重定向 U
  • 如何使用“子例程引用”作为哈希键

    在 Perl 中 我正在学习如何取消引用 子例程引用 但我似乎无法使用子例程引用作为哈希 键 在下面的示例代码中 我可以创建对子例程 subref 的引用 然后取消引用它以运行子例程 subref 我可以使用引用作为哈希 值 然后轻松取消引
  • 无法在 Perl 中找到 DBI.pm 模块

    我使用的是 CentOS 并且已经安装了 Perl 5 20 并且默认情况下存在 Perl 5 10 我正在使用 Perl 5 20 版本来执行 Perl 代码 我尝试使用 DBI 模块并收到此错误 root localhost perl
  • 警告:请求的映像平台 (linux/amd64) 与检测到的主机平台 (linux/arm64/v8) 不匹配

    警告 请求的映像平台 linux amd64 与检测到的主机平台 linux arm64 v8 不匹配 并且未请求特定平台 docker 来自守护程序的错误响应 无法选择具有功能的设备驱动程序 gpu 我在 mac 上尝试运行此命令时遇到此
  • 每个命令都返回“bash:<命令>:找不到命令...”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我刚刚安装了 Scala 并添加了路径gedit bashrc export SCALA HOME home avijit sca
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed
  • 何时计划 (SELECT) 查询?

    在 PostgreSQL 中 什么时候计划 SELECT 查询 Is it 在报表准备时 或者 在处理 SELECT 开始时 或者 别的东西 我问的原因是 Stackoverflow 上有一个问题 相同的查询 两种不同的方式 性能截然不同
  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 使用 inotify 的正确方法是什么?

    我想使用inotifyLinux 上的机制 我希望我的应用程序知道文件何时aaa被改变了 您能给我提供一个如何做到这一点的示例吗 文档 来自监视文件系统活动 inotify https developer ibm com tutorials
  • perl - 子进程向父进程发送信号

    我编写了以下代码来测试孩子和父母之间的信号传递 理想情况下 当子进程向父进程发出 SIGINT 时 父进程应该在新的迭代中返回并等待用户输入 我在 perl 5 8 中观察到了这一点 但在 perl 5 6 1 我被要求使用 中 父级实际上
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file

随机推荐

  • C++ MYSQL 多线程并发查询处理数据

    1 ThreadPool hpp pragma once ifndef THREAD POOL H define THREAD POOL H include
  • ERROR: Could not find a version that satisfies the requirement keras-nightly (from versions: none)

    问题描述 这个错误发生于博主在python 3 8的环境里安装tensorflow 2 5 0时 执行pip install tensorflow 2 5 0 出现了以下错误 ERROR Could not find a version t
  • Java正则表达式详解

    1 1 正则表达式的概念以及演示 正则表达式可以用一些规定的字符来制定规则 并用来校验数据格式的合法性 正则表达式就是用来验证各种字符串的规则 它内部描述了一些规则 我们可以验证用户输入的字符串是否匹配这个规则 正则表达式是一种强大的校验机
  • 2023-8-23 堆排序

    题目链接 堆排序 include
  • python写程序计算无穷级数_[python][计算方法]利用无穷级数计算幂运算(开根号)...

    encoding gbk a的n次方函数 def exp a n ret 1 for i in range 0 n ret a return float ret n n 1 n 2 def getN minus n n x ret floa
  • 【教程】加速访问和下载github项目,原来替换一个域名就可以加速了

    目录 前言 gitee方法 更简便方法 使用教程 前言 大家平时下载github项目的时候 非常的慢 有时候浏览某个项目的md介绍时候 图片就是加载不出来 让人很苦恼 想锤电脑 gitee方法 于是有很多人都是用gitee的方法 先导入到g
  • 【存储管理】brk()系统调用

    尽管应用程序编程时很少直接调用brk 系统调用 但是它是最经常使用的系统调用 1 C语言中的malloc以及C 语言中的new都在间接的调用着brk 这个系统调用 内核中含有3GB的用户虚存空间 会部分映射到物理存储空间 用户程序经过编译
  • vue中怎么引入element以及使用的详细教程

    引入element 安装依赖 在使用 Element 之前 需要先安装 Element 的依赖库 可以使用 npm 或者 yarn 安装 npm npm i element ui S yarn yarn add element ui 引入C
  • Qt 如何关闭 Debug信息输出

    在pro文件中加上DEFINES QT NO DEBUG OUTPUT 然后重新构建一下程序 qDebug的信息就不再输出了 不过qWarning qCritical等信息仍然可以输出 类似的宏还有 QT NO INFO OUTPUT QT
  • 剑指Offer第五十八题:对称的二叉树

    题目描述 请实现一个函数 用来判断一颗二叉树是不是对称的 注意 如果一个二叉树同此二叉树的镜像是同样的 定义其为对称的 1 思路 我们通常有三种不同的二叉树遍历算法 即前序遍历 中序遍历和后序遍历 在这三种遍历算法中 都是先遍历左子结点再遍
  • 良许Linux

    Linux 服务器我们天天打交道 特别是 Linux 工程师更是如此 为了保证服务器的安全与性能 我们经常需要监控服务器的一些状态 以保证工作能顺利开展 本文介绍的几个命令 不仅仅适用于服务器监控 也适用于我们日常情况下的开发 1 watc
  • depcheck检测缺失哪些依赖包

    npm install g depcheck 如果不想全局安装 npm i depcheck后可以在package json的scripts中输入 check depcheck 之后使用 npm run check depcheck npm
  • umi-request 网络请求之路

    umi request 网络请求之路 背景 在做中台业务应用开发的过程中 我们发现在请求链路上存在以下问题 请求库各式各样 没有统一 每次新起应用都需要重复实现一套请求层逻辑 切换应用时需要重新学习请求库 API 各应用接口设计不一致 混乱
  • sql注入Less11-20

    Less 11 POST 1 先登录 在表格中输入admin admin 登录成功后为下图 2 在post data中输入以下 uname passwd 1 submit submit 返回的结果显示存在sql语法错误 证明存在注入漏洞 u
  • 修改别人代码的原则

    工作过程中难免会涉及到修改或维护别人写的代码 如 代码原作者请假 离职 或相关的bug落到了你的头上 或用别人写的通用方法不爽时 如果碰到修改别人的代码时 需要注意哪些事项呢 1 和原作者沟通 当用到了他人写的通用方法 又感觉不爽时 如果原
  • 各个版本chrome允许加载使用flash的方法

    根除办法 在html中嵌入标签 用户自动选择是否加载flash 69 0 之前的版本 1 打开 chrome settings content flash 2 禁止网站运行Flash gt 改为 Ask Default 3 允许 gt 添加
  • golang开发的准备 - gvm(go版本管理软件)的安装

    0 系统环境 ubuntu18 04 1 前置条件 sudo apt get install bison 2 安装步骤 1 从github下载安装包文件 git clone https github com moovweb gvm git
  • 【c++】14.编译proto和proto相关用法

    编译proto和proto相关用法 关于proto相关的知识可以参考系列博客 https blog csdn net daaikuaichuan category 9869251 html xx proto文件中如果要注释的话 注释符号也是
  • 【Kaggle】Stable Diffusion - Image to Prompts竞赛代码初步理解

    文章目录 一 前言 二 导包 三 加载预训练的 OFA 模型 四 模型EDA 五 Inference 六 安装并导入所有依赖项 七 设置配置 八 加载示例提交 九 Build index from images 十 CLIP interro
  • grep命令

    grep 全称是global regular expressions print 功能就是查找匹配模式的行 grep对文本内容的处理是以行为单位 输出也是输出匹配的行 也可以使用两个变种程序egrep和fgrep egrep与grep E相