grep指令详解

2023-11-12

shell grep指令详解

grep 参数:
-e :   使用PATTERN作为模式。这可以用于指定多个搜索模式,或保护以连字符(- )开头的图案。指定字符串做为查找文件内容的样式

-f :   指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式
-w:  精准匹配字符串,必须完全符合,包含大小写下划线空格等
-i:  忽略大小写,可以和 -w 一起使用
-o:  参数只输出匹配到的字符串,不会输出匹配行中其他的信息
-r:  递归文件夹,从当前文件夹向下递归查找所有子文件夹中的文件(不包含链接文件,包含二进制文件,文本等)
-n:  匹配到具体字符串后,显示字符串在文本中的行数,或者是组合指令中显示匹配的字符串是在上一个指令输出的第几行
-R:  查找所有文件包含子目录

重要参数(查询排除指定文件夹,或者二进制文件):

–binary-file=without-match:   排除二进制文件查询。

--exclude=GLOB:      跳过基本名称与GLOB匹配的文件(使用通配符匹配)。文件名GLOB可以使用 * 和[...]作为通配符,和\引用通配符或反斜杠字符。
   搜索其文件名和GLOB通配符相匹配的文件的内容来查找匹配使用方法: grep -H --exclude=c* "old" ./* c*是通配文件名的通配符./* 指定需要先通配文件名的文件的范围,必须要给*,不然就匹配不出内容,(如果不给*,带上-r选项也可以匹配)。
--exclude-dir=poky:     跳过指定的目录,指定的poky目录下的任何文件都不会去查找。匹配一个目录下的很多内容的同时,还要让一些子目录不接受匹配,就使用此选项。
--exclude-from=FILE:    跳过文件和目录匹配,跳过FILE(文件或者文件夹),但是这条指令在跳过文件夹时,没有直接使用--exclude-dir效率高。
--include=GLOB:      仅搜索其基本名称与GLOB匹配的文件(使用--exclude下所述的通配符匹配)

上下文前后行匹配:
-A n 匹配行的后 n 行,A是after
-B n 匹配行的前 n 行,B是before
-C n 匹配行的,前后各 n 行, 前面 n 行要显示出来,后面n 行也要显示出来
grep 打印显示匹配到行的前后行。如果在只是想匹配模式的上下几行,grep可以实现。

$grep -5 'parttern' file_name  //打印匹配行的前后5行
$grep -C 5 'parttern' file_name //打印匹配行的前后5行, 前面5行,后面5行
$grep -A 5 'parttern' file_name //打印匹配行的后5行
$grep -B 5 'parttern' file_name //打印匹配行的前5行

grep 正则表达式主要参数:
\:   忽略正则表达式中特殊字符的原有含义
^:  匹配正则表达式的开始行
$:  匹配正则表达式的结束行
\<:  从匹配正则表达 式的行开始
\>:  到匹配正则表达式的行结束
[ ]:  单个字符,如[A]即A符合要求
[ - ]:  范围,如[A-Z],即A、B、C一直到Z都符合要求
.:  所有的单个字符 *:有字符,长度可以为0

grep 查找使用 "" '' 双引号和单引号的区别是:
""双引号会将里面的字符串进行转义, '' 单引号不会转义
双引号 ""
name=hello
$grep -n "${name}"  mkconfig/name.xml

grep “” 会将里面的${name} 进行转换转换为 hello 字符串,grep进行转义

单引号 ‘’

name=hello
$grep -n '${name}' mkconfig/name.xml

这里grep查找的就是 ${name} 不会进行转换,grep不会进行转义


grep查找过滤掉二进制文件,不显示匹配到的二进制文件,有三种方式:
1. -- binary-files=with-out 把二进制文件全部过滤掉
$ grep -rnwi  "ARM" .  --binary-files=without-match     .  代表从当前路径开始向下递归查找
  1. -I 参数大写的 i
$ grep -rnwi  -I "ARM" . 
  1. 使用 --binary-files=text 缩小范围
$ grep --binary-files=text -nrwi  "ARM" .

grep 同时满足多个字符串查找:

grep 字符串1 文件名| grep 字符串2|grep 字符串3|grep ...
中间使用管道 |
grep 满足多个关键字查找
参数: -E
grep -E "字符串1|字符串2|字符串3|" file_name
或者
egrep "字符串1|字符串2|字符串3|" file_name


grep 指令扩展
#!/bin/bash

name=$1
name_list="qiandazhuang lixiaohong caixiaoming wangliu"

is_name_list=$(grep -i "\b$name\b" <<< ${name_list})

echo "name:" ${name}
echo "name_list:" ${name_list}
echo "is_name_list:" ${is_name_list}

运行结果1:
$ ./grep_cmd.sh wangliu
name: wangliu
name_list: qiandazhuang lixiaohong caixiaoming wangliu
is_name_list: qiandazhuang lixiaohong caixiaoming wangliu

运行结果2:
$ ./grep_cmd.sh zhangsan
name: zhangsan
name_list: qiandazhuang lixiaohong caixiaoming wangliu
is_name_list:

运行结果1,当参数在${name_list}内,输出的${is_name_list}为本身,也就是说变量${is_name_list}非空;

运行结果2,当参数不在${name_list}内,输出的${is_name_list}为空,变量${is_name_list}为空;

可以利用输入参数是否在一个集合内部进行判断,选择不同的if 分支执行程序运行。

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

grep指令详解 的相关文章

  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • 打包/解包 - 小端 - 64 位 - 问题

    usr bin env perl use warnings use 5 012 my var 1 lt lt 31 say unpack B pack N var 10000000000000000000000000000000 我怎样才能
  • git 错误:无法处理 https

    当我尝试使用 git clone 时https xxx https xxx我收到以下错误我不处理协议 https 有人可以帮我吗 完整消息 dementrock dementrock A8Se git 克隆https git innosta
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • bash循环跳过注释行

    我正在循环文件中的行 我只需要跳过以 开头的行 我怎么做 bin sh while read line do if line doesn t start with then echo line fi done lt tmp myfile 谢
  • 将 stdin/stdout 从执行进程重定向到 Perl 中的管道

    我试图让执行子进程中的 STDOUT STDERR 通过 Perl 中的管道返回到父进程 我见过的最接近我想做的事情是 http forums devshed com perl programming 6 exec and redirect
  • 如何从 PROC 获取有关子进程的信息

    我正在尝试编写一个以几个进程作为参数的程序 然后父进程执行每个子进程并打印出一些相关的统计信息 示例 generate ls l 将生成一个程序 打印出有关 ls l 的一些统计信息 特别是其系统时间 用户时间和上下文切换次数 我不想使用
  • vagrant ssh -c 并在连接关闭后保持后台进程运行

    我正在编写一个脚本来启动和后台流浪机器内的进程 似乎每次脚本结束和 ssh 会话结束时 后台进程也会结束 这是我正在运行的命令 vagrant ssh c cd vagrant src nohup python hello py gt he
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed
  • linux命令中括号的用途是什么[重复]

    这个问题在这里已经有答案了 我在 Linux 终端中运行以下命令 谁能告诉我 Linux 终端中括号和以下命令的用途是什么 echo GET HTTP 1 0 echo 主机 www google com echo 数控 www googl
  • 为什么我的 Dockerfile CMD 不起作用?

    所以在我的 Dockerfile 的末尾我有这样的内容 WORKDIR home CMD django admin startproject whattt CMD bin bash 当我创建映像然后运行容器时 一切都按预期运行 没有错误 D
  • 使用 posix_spawn 启动进程

    我正在使用以下代码在 Linux 中启动新进程 pid t processID char argV 192 168 1 40 char 0 int status 1 status posix spawn processID home use
  • shell中如何从数组中随机选择一个项目

    我正在 Shell 脚本中创建一个机器人 Array with expressions expressions Ploink Poink I Need Oil Some Bytes are Missing Poink Poink Piiii
  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 无法在 64 位 Linux 上从汇编 (yasm) 代码调用 C 标准库函数

    我有一个函数foo以汇编语言编写 并在 Linux Ubuntu 64 位上使用 yasm 和 GCC 编译 它只是使用以下命令将消息打印到标准输出puts 如下所示 bits 64 extern puts global foo secti
  • 配置:错误:无法运行C编译的程序

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

随机推荐

  • 高通平台中用devicetree注册设备及驱动匹配

    1 在设备树文件 dts 中的相应节点下添加要注册设备的节点 soc plf char dev mytest plf char dev compatible mytest plf char dev 定义好的设备树源文件 dts文
  • Python数据可视化(三)绘制统计图形大全

    3 1 柱状图 以 Python 代码的形式讲解柱状图的绘制原理 这里重点讲解 bar 函数的使用方法 代码 import matplotlib as mpl import matplotlib pyplot as plt mpl rcPa
  • 网络编程——TFTP协议(基于UDP)

    目录 1 tftp协议概述 2 tftp下载模型 3 tftp协议分析 代码 1 tftp协议概述 简单文件传输协议 适用于在网络上进行文件传输的一套标准协议 使用UDP传输 特点 是应用层协议 基于UDP协议实现 数据传输模式 octet
  • 小例子:实现互斥锁,自旋锁

    小例子实现互斥锁 自旋锁 在多线程并发访问临界区时 使用上面三种操作 可以实现并发访问 首先创建是个线程 for i 0 i
  • 开源主流分布式文件系统简单介绍

    文章目录 一 分布式文件系统简介 1 特点 2 主要指标及分类对比 3 AFS与NFS 二 开源分布式文件系统 1 GFS 1 GFS与NFS AFS的区别 2 BigTable 3 Chubby 4 特点1 2 HDFS 1 HDFS与C
  • 多线程与多进程(5)

    概念上 一 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 是系统进行资源分配和调度的一个独立单位 二 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能独立运行的基本单位 线程自己基本上不拥有系统资源 只
  • AlexNet网络详解及各层作用

    AlexNet 图中所给关于卷积核的尺寸来自于Alex在2012年发表的经典文章 Alex在2012年提出的alexnet网络结构模型引爆了神经网络的应用热潮 并赢得了2012届图像识别大赛的冠军 使得CNN成为在图像分类上的核心算法模型
  • CSDN----Markdown:---文字颜色、大小和字体设置

    Markdown是一种轻量级标记语言 创始人为约翰 格鲁伯 英语 John Gruber 它允许人们使用易读易写的纯文本格式编写文档 然后转换成有效的XHTML 或者HTML 文档 这种语言吸收了很多在电子邮件中已有的纯文本标记的特性 一
  • [BuildRelease]C++代码静态分析工具splint

    转自 http www cnblogs com bangerlee archive 2011 09 07 2166593 html引言 最近在项目中使用了静态程序分析工具PC Lint 体会到它在项目实施中带给开发人员的方便 PC Lint
  • QQ-AR实物识别!香蕉扫一扫,解救小黄人?

    神偷奶爸3 已于7月7日正式登录国内各大院线 奶爸格鲁继续率领小黄人们贱萌作死 早先 神偷奶爸3 创造了北美影史最高4529馆开画记录 同时首周报收7541万美元 国内上映前海外票房累积1 421亿美元 毫无意外地登顶北美票房榜首座 根据猫
  • 【多目标跟踪论文阅读笔记——2021年CVPR论文粗读记录】

    阅读心得 多目标跟踪经典论文 2021CVPR论文粗读记录 前言 一 学习策略类 QDTrack 二 Temporal Spatial 类 TADAM Alpha Refine TraDes CorrTracker 三 Motion mod
  • 长大后会发现,学习其实就是因为自己想知道

    简单总结 01 习惯 看不懂的名词 第一时间google 02 注释 注释一些思路 把注释嵌入到工作和生活 像现在的记录 03 随记 关注身边的细节 及时回应别人 明白自己想说什么 选择好时机去说 04 务实方法 ETC Easier to
  • IDEA 设置为护眼的豆沙绿

    代码区域设置成护眼色 先打开 IDEA 的设置界面 然后按照下图按顺序店了设置就可以了 这个时候 可以看到 只有代码区域别成了护眼色 其他地方还是白的刺眼 我们来一个一个的解决掉 左侧的文件页修改为护眼色 还是先打开设置 然后如下图所示 先
  • 非对称加密工作原理

    非对称加密 非对称加密使用两个密钥 一个是public key 一个是private key 通过某个算法 使得数据的加密和解密使用不同的密钥 因为用的是不同的密钥 所以称为非对称加密 非对称加密最著名的是RSA算法 这是以其发明者Rive
  • java static变量_什么是静态(static)?什么是静态方法,静态变量,静态块和静态类...

    static是Java中的一个关键字 我们不能声明普通外层类或者包为静态的 static用于下面四种情况 静态变量 我们可以将类级别的变量声明为static 静态变量是属于类的 而不是属于类创建的对象或实例 因为静态变量被类的所有实例共用
  • Excel解决CSV文件中的乱码

    背景 对于CSV文件中的乱码问题 大概率是编码的问题 可以基于Excel进行编码转换 或将文本进行编码转化 解决办法 打开Excel应用 点击文件 新建文件 点击文件 选择导入 导入具体的CSV文件 选择CSV文件 点击完成即可 然后就可以
  • 麻雀算法(SSA)优化长短期记忆神经网络的数据分类预测,SSA-LSTM分类预测,多输入单输出模型

    清空环境变量 warning off 关闭报警信息 close all 关闭开启的图窗 clear 清空变量 clc 清空命令行 读取数据 res xlsread 数据集 xlsx num res size res 1 样本数 每一行 是一
  • vue + css气泡图动态气泡图

    div ul class bubbleUl li class bubbleLi div class textBubble span item value span div div class topDiv div style width 1
  • 从一个类调用另一个类的方法或属性

    package 练习 class yu String m 人工小智能 public void shout1 System out println 我是 m 今年18岁 同类中直接调用了m public void shout2 yu p ne
  • grep指令详解

    shell grep指令详解 grep 参数 e 使用PATTERN作为模式 这可以用于指定多个搜索模式 或保护以连字符 开头的图案 指定字符串做为查找文件内容的样式 f 指定规则文件 其内容含有一个或多个规则样式 让grep查找符合规则条