grep命令详解(如何匹配多个字符串)(grep指令)(grep -q)

文章目录

    • 20221011 grep如何匹配多个标志?
    • 20230412 grep -q(`Use grep -q instead of comparing output with [ -n .. ].`警告)
    • 20230421 匹配前后空格`\s`

参考文章:grep命令详解

| grep -c [被搜索文本]	# 统计被搜索文本出现的次数

参考文章:Linux中用grep命令来搜索单词及统计匹配的行数

20221011 grep如何匹配多个标志?

参考文章:Linux shell:grep命令查找多个字符串(grep同时匹配多个关键字或任意关键字)

[命令] | grep '[pattern1]\|[pattern2]'

注意\|跟前后pattern要连着

如,在我们的英伟达盒子上:

root@nx-desktop:/home/ubuntu# ls -l
total 52
drwxr-xr-x 5 ubuntu ubuntu 4096 929 14:59 Desktop
drwxr-xr-x 2 ubuntu ubuntu 4096 1224  2020 Documents
drwxr-xr-x 2 ubuntu ubuntu 4096 927 16:19 Downloads
-rw-r--r-- 1 ubuntu ubuntu 8980 1224  2020 examples.desktop
drwxr-xr-x 2 ubuntu ubuntu 4096 1224  2020 Music
drwxr-xr-x 2 ubuntu ubuntu 4096 1224  2020 Pictures
drwxrwxr-x 3 ubuntu ubuntu 4096 1010 11:40 projects
drwxr-xr-x 2 ubuntu ubuntu 4096 1224  2020 Public
drwxr-xr-x 2 ubuntu ubuntu 4096 1224  2020 Templates
drwxr-xr-x 2 ubuntu ubuntu 4096 1224  2020 Videos
drwxrwxr-x 8 ubuntu ubuntu 4096 1224  2020 VisionWorks-SFM-0.90-Samples
root@nx-desktop:/home/ubuntu# 
root@nx-desktop:/home/ubuntu# ls -l | grep 'op\|ic'
drwxr-xr-x 5 ubuntu ubuntu 4096 929 14:59 Desktop
-rw-r--r-- 1 ubuntu ubuntu 8980 1224  2020 examples.desktop
drwxr-xr-x 2 ubuntu ubuntu 4096 1224  2020 Music
drwxr-xr-x 2 ubuntu ubuntu 4096 1224  2020 Pictures
drwxr-xr-x 2 ubuntu ubuntu 4096 1224  2020 Public
root@nx-desktop:/home/ubuntu# 
root@nx-desktop:/home/ubuntu# 

在海康摄像头里:

ls
bin      dev      heop     lib      proc     sys      var
dav      etc      home     linuxrc  sbin     usr
# 

# ls -l | grep 'b\|e'
ls -l | grep 'b\|e'
drwxrwxr-x    2 1006     1008          1260 Sep 27 09:58 bin
drwxrwxrwt   15 0        0             5180 Sep 27 09:58 dev
drwxr-xr-x    2 0        0              100 Oct  9 17:30 etc
drwxr-xr-t    3 0        0               60 Oct  9 17:30 heop
drwxr-xr-t    6 0        0              120 Oct  9 17:30 home
drwxr-xr-x    4 0        0             4060 Sep 27 09:58 lib
lrwxrwxrwx    1 0        0               11 Sep 27 09:58 linuxrc -> bin/busybox
drwxrwxr-x    2 1006     1008           180 Sep 27 09:58 sbin
drwxrwxr-x    6 1006     1008           120 Sep 27 09:58 usr
# 

20230412 grep -q(Use grep -q instead of comparing output with [ -n .. ].警告)

示例:

if ! docker images | awk '{print $1":"$2}' | grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$"; then
	# do something if the image does not exist
else
    # do something if the image exists
fi

grep -q是grep命令的一个选项,它的作用是在查找匹配项时不输出任何内容,只返回一个退出状态码。如果找到匹配项,则返回0,否则返回1。

在if语句中,我们可以使用grep -q来检查某个条件是否成立,而不必在标准输出中显示任何内容。这样可以提高脚本的效率和可读性。

在我们之前的例子中,grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$"用于检查docker images的输出是否包含IMAGE_NAME和IMAGE_TAG的组合。如果存在,则if语句返回true,否则返回false。由于我们只关心是否存在匹配项,而不关心具体的匹配内容,因此使用grep -q可以避免不必要的输出和处理。

注意:if ! docker images | awk '{print $1":"$2}' | grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$";不要改成if ! $(docker images | awk '{print $1":"$2}' | grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$");因为在if语句中,我们只需要检查命令的退出状态码,而不需要将其输出作为if语句的条件。因此,可以直接使用if ! docker images | awk '{print $1":"$2}' | grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$"来检查镜像是否不存在。

这个细节来源于一个shellcheck的警告:SC2143 – ShellCheck Use grep -q instead of comparing output with [ -n … ].

20230421 匹配前后空格\s

如下,用grep "\s$NODE_PRJ_NAME\s"能匹配搜索内容的前后空格

注意:

在正则表达式中,空格可以用空格字符 " " 或者元字符 "\s" 来匹配。它们的区别在于:
1、" " 只能匹配空格字符,而 "\s" 可以匹配任何空白字符,包括空格、制表符、换行符等。
2、" " 只能匹配一个空格字符,而 "\s" 可以匹配一个或多个空白字符。
因此,如果要匹配任何空白字符,应该使用 "\s";如果只需要匹配空格字符,可以使用 " "

在这里插入图片描述

# 用 pm2 启动 node 项目
echo "Start node prj ..."
# 判断进程是否在运行
# if $PM2 list | grep -q "\s$NODE_PRJ_NAME\s"; then
if pm2 list | grep -q "\s$NODE_PRJ_NAME\s"; then
    echo
    # $PM2 list
    pm2 list
    echo
    echo "进程 $NODE_PRJ_NAME 已经在运行"
    read -p "是否停止并删除进程?[y/n]" choice
    case "$choice" in
    y | Y)
        echo
        echo "停止并删除进程 $NODE_PRJ_NAME ..."
        echo
        # $PM2 stop $NODE_PRJ_NAME && $PM2 delete $NODE_PRJ_NAME
        pm2 stop $NODE_PRJ_NAME && pm2 delete $NODE_PRJ_NAME
        ;;
    *)
        exit 0
        ;;
    esac
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/12846.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

冯诺依曼体系结构

冯诺依曼体系结构 目录 冯诺依曼体系结构引入1、冯诺依曼体系结构1.1 内存1.2 操作系统预加载 2、操作系统2.1 理解管理2.2 系统调用接口2.3 操作系统四大基本功能 引入 冯诺依曼体系结构(von Neumann architecture)是现代计算机体系结构的基础&#xf…

JavaSE学习进阶day03_03 Object类

第三章 Object类 介绍这个类之前,先回顾一下API: 3.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。 如果一个类没有特别指定父…

手势控制的机器人手臂

将向你展示如何构建机械手臂并使用手势和计算机视觉来控制它。下面有一个在开发阶段的机械手臂的演示视频。 展示开发中的手臂的演示视频:https://youtu.be/KwiwetZGv0s 如图所示,该过程首先用摄像头捕捉我的手及其标志。通过跟踪特定的界标,…

C++语法(16)---- 多态

https://blog.csdn.net/m0_63488627/article/details/130106690?spm1001.2014.3001.5501https://blog.csdn.net/m0_63488627/article/details/130106690?spm1001.2014.3001.5501 目录 1. 多态的概念 2.多态的实现 1.虚函数 2.多态条件 得到的多态条件 特殊条件 3.虚函…

数据结构入门-10-AVL

文章目录 一、AVL的性质1.2 平衡二叉树定义 二、添加需达到平衡2.1 平衡因子2.1.2 平衡因子的实现 2.2 判断该二叉树是否为平衡二叉树2.3 左旋右旋2.3.1 左旋LL右旋RR基本原理2.3.2 LR RLLRRL 三、AVL中删除 一、AVL的性质 平衡二叉树 AVL树得名于它的俄罗斯发明者G. M. Adels…

被裁员了,要求公司足额补缴全部公积金,一次补了二十多万!网友兴奋了,该怎么操作?...

被裁员后,能要求公司补缴公积金吗? 一位网友问: 被裁员了,要求公司把历史公积金全部足额缴纳,现在月薪2.3万,但公司每个月只给自己缴纳300元公积金,结果一次补了二十多万,一次性取出…

Node 【Buffer 与 Stream】

文章目录 🌟前言🌟Buffer🌟 Buffer结构🌟 什么时候用Buffer🌟 Buffer的转换🌟 Buffer使用🌟 创建Buffer🌟 字符串转Buffer🌟 Buffer转字符串🌟 拼接Buffer&am…

Java每日一练(20230417)

目录 1. N 皇后 🌟🌟🌟 2. 搜索二维矩阵 🌟🌟 3. 发奖金问题 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 …

权限控制_SpringSecurity

认证-授权 认证:系统提供的用于识别用户身份的功能,通常提供用户名和密码进行登录其实就是在进行认证,认证的目的是让系统知道你是谁。 授权:用户认证成功后,需要为用户授权,其实就是指定当前用户可以操作…

Node 内置模块 【fs模块】

文章目录 🌟前言🌟fs模块🌟 使用fs模块🌟 异步编程和同步编程🌟 异步编程🌟 同步编程 🌟常用操作🌟 文件操作🌟 readFile异步读取文件🌟 readFileSync同步读取…

YOLOv8 更换主干网络之 GhostNetV2

《GhostNetV2:Enhance Cheap Operation with Long-Range Attention》 轻量级卷积神经网络(CNN)是专门为在移动设备上具有更快推理速度的应用而设计的。卷积操作只能捕捉窗口区域内的局部信息,这防止了性能的进一步提高。将自注意力引入卷积可以很好地捕捉全局信息,但这将大…

【系统集成项目管理工程师】项目进度管理

💥十大知识领域:项目进度管理 主要考计算题 项目进度管理包括以下 7 个过程: 规划进度管理过程定义活动过程排列活动顺序过程估算活动资源过程估算活动持续时间过程制定进度计划过程控制进度过程 一、规划进度管理过程 制定政策、程序和文档以管理项目进…

JeecgBoot 3.5.1 版本发布,开源的企业级低代码平台

项目介绍 JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领…

苹果电容笔值得买吗?ipad电容笔推荐平价

在当今时代,高科技已经成为推动数字产品发展的重要推动力。无论是在工作上,还是在学习上,大屏幕都能起到很好的作用。IPAD将会更好地融入我们的生活,不管是现在还是未来。而ipad配上一支简单的电容笔,不仅可以提高工作…

几分种学会React Router v6使用

React路由可以实现页面间的切换。 传送门:英文文档 中文教程: https://www.reactrouter.cn/docs/getting-started/tutorial 1.基础使用 1.安装react-router npm i react-router-dom62.配置根组件app.js import { React, lazy, Suspense } from "…

C++ -3- 类和对象 (中) | 构造函数与析构函数(一)

文章目录 1.类的6个默认成员函数2.构造函数3.析构函数构造函数与析构函数应用场景缺省值初始化 1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自…

【文章学习系列之模型】FEDformer

本章内容 文章概况模型流程主要结构Frequency Enhanced Decomposition Architecture(频率增强分解结构)Fourier enhanced blocks and Wavelet enhanced blocks(傅里叶增强模块和小波增强模块)Fourier Enhanced Structure&#xff…

【Java 数据结构】优先级队列 (堆)

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

快速精简软件,如何让软件缩小到原来的5%大小,从删除文件入手,到修改C++引用库,合规解决存储问题

Hi~大家好,今天制作一个简单的精简软件的教学~ 事先说明下,精简软件并不违反任何规定,尤其是开源软件,这里也仅讨论开源软件的修改,根据几乎所有开源软件的开源规则,精简软件,本质也就是修改软件…

戴尔G3 Ubuntu18.04双系统安装

ROS学习需要使用Linux系统,首先就是Ubuntu,我选择的是18.04.6这个版本,因为后面我要使用以Jetson Nano为主控的Jetbot进行ROS编程,Jetbot所带的出厂镜像就是18.04,为了方便程序移植,以及减少不必要的麻烦。…