三剑客之grep

grep初级简单使用:Liunx查找&过滤-CSDN博客

正则表达式-CSDN博客

目录

grep分类

返回值 

使用返回值控制流程

grep参数示例

基本参数

grep与正则表达式的搭配使用与示例

看完正则与示例进行无答案式练习


  grep 用于在文件或输入流中查找特定模式或文本。它的名称来源于 "Global Regular Expression Print",可以使用正则表达式来匹配文本。它有许多变体和扩展,支持不同的搜索方法和功能。

grep分类

grep 的主要版本

  • grep:这是基本的 grep 命令,支持基础的文本搜索和简单的正则表达式。
  • egrep:指 "Extended GREP",支持扩展正则表达式(ERE)。在现代 grep 版本中,egrepgrep -E 的同义词。
  • fgrep:指 "Fixed GREP",用于搜索固定的字符串,而不是正则表达式。在现代 grep 版本中,fgrepgrep -F 的同义词。

egrepfgrep 通常被视为 grep -Egrep -F 的同义词,提供更好的兼容性和功能统一性。

返回值 

grep 命令的返回值是一个非常有用的特性,用于判断搜索操作的结果。根据 grep 的执行情况,返回值可能会有所不同。这些返回值可以在脚本和自动化任务中用于控制流程。

  • 0:表示至少找到了一条匹配的行。 即找到拉,表示正确。
  • 1:表示没有找到匹配的行。就是没找到。
  • 2:表示发生错误,如文件无法读取或参数不正确。即找的地不对

使用返回值控制流程

在 Bash 脚本和命令行中,返回值可以通过 $? 获取

1.基本示例
# 查找文件中是否包含 "pattern"
grep "pattern" filename.txt
# 检查返回值
if [ $? -eq 0 ]; then
  echo "Match found"
else
  echo "No match found"
fi



2.使用 && 和 ||
返回值也可以与逻辑操作符结合,用于更简洁的控制流程。
# 如果找到匹配的行,打印 "Found"
grep "pattern" filename.txt && echo "Found"

# 如果没有找到匹配的行,打印 "Not found"
grep "pattern" filename.txt || echo "Not found"



3.处理错误
如果 grep 返回值为 2,表示发生了错误,您可以采取相应的措施。
grep "pattern" non_existent_file.txt
if [ $? -eq 2 ]; then
  echo "Error occurred"
fi


4.结合 set -e
在 Bash 脚本中,set -e 可以用于在命令失败时停止脚本。如果使用 grep 来控制流程,结合 set -e 可以确保脚本在错误时停止。

set -e
# 如果没有匹配,脚本将停止
grep "pattern" filename.txt

grep参数示例

基本参数

(这里记住常用的就行,其它做个了解)

  • -i:忽略大小写。
  • -v:反向匹配,即显示不包含匹配模式的行。
  • -c:返回匹配行的计数。
  • -n:显示匹配行的行号。
  • -l:仅显示包含匹配行的文件名。
  • -o:仅显示匹配的部分,而不是整个行。
  • -r-R:递归搜索,适用于目录。
  • -E:使用扩展正则表达式。
  • -F:使用固定字符串搜索。
  • -s:抑制错误消息。
  • -q:静默退出,不输出任何内容。
  • -x:匹配整个行,而不是部分行。
  • --color:高亮显示匹配的部分。
  • --exclude:排除特定文件或目录。
  • --include:仅搜索特定文件或目录。
  • -B N:显示匹配行前面的 N 行。
  • -A N:显示匹配行后面的 N 行。
  • -C N:显示匹配行前后各 N 行。

基本搜索
# 查找包含 "hello" 的行
grep "hello" file.txt

忽略大小写
# 忽略大小写查找 "HELLO"
grep -i "HELLO" file.txt

反向匹配
# 查找不包含 "error" 的行
grep -v "error" file.txt

查找包含特定文本的文件
# 查找当前目录中包含 "error" 的文件
grep -l "error" *.log

显示行号
# 显示匹配行的行号
grep -n "pattern" file.txt

返回匹配行的计数
# 返回匹配 "error" 的行数
grep -c "error" file.txt

显示匹配部分
# 仅显示匹配的部分
grep -o "pattern" file.txt

递归搜索
# 递归搜索目录中的文件
grep -r "pattern" /path/to/directory/

使用扩展正则表达式
# 查找包含数字的行
grep -E "[0-9]" file.txt

高亮显示匹配
# 高亮显示匹配的部分
grep --color "pattern" file.txt

显示前后行
# 显示匹配行及其前后各 2 行
grep -C 2 "pattern" file.txt

grep与正则表达式的搭配使用与示例

匹配行首和行尾
# 匹配以 "hello" 开头的行
grep -E "^hello" filename.txt

# 匹配以 "world" 结尾的行
grep -E "world$" filename.txt

匹配多种模式
# 匹配 "cat" 或 "dog"
grep -E "cat|dog" filename.txt

# 匹配 "error" 或 "warning"
grep -E "error|warning" filename.txt

使用字符类
# 匹配包含数字的行
grep -E "[0-9]" filename.txt

# 匹配包含字母的行
grep -E "[a-zA-Z]" filename.txt

使用量词
# 匹配包含至少一个数字的行
grep -E "[0-9]+" filename.txt

# 匹配包含零到两个 "x" 的行
grep -E "x{0,2}" filename.txt

复杂的正则表达式
# 匹配包含单词 "hello" 后面跟着一个或多个空格和 "world" 的行
grep -E "hello +world" filename.txt

# 匹配包含零或多个字母 "a" 和 "b" 的行
grep -E "(a|b)*" filename.txt

递归查找
# 在目录中递归查找包含特定模式的文件
grep -rE "pattern" /path/to/directory/

看完正则与示例进行无答案式练习

egrep 'NW' datafile.txt

egrep 'NW' d*.txt

egrep '^n' datafile.txt

egrep '4$' datafile.txt

egrep TBSavage datafile.txt

egrep 'TB Savage datafile.txt'

egrep '5\..' datafile.txt

egrep '\.5' datafile.txt

egrep '^[we]' datafile.txt

egrep '[^0-9]' datafile

egrep  '[A-Z][A-Z] [A-Z]' datafile

egrep 'ss*' datafile

egrep '[a-z]{9}' datafile

egrep '\<north' datafile

egrep '\<north\>' datafile

egrep '\<[a-r].*n\>' datafile

egrep '^n\w*\W' datafile

egrep '\bnorth\b' datafile

egrep 'NW|EA' datafile

egrep '3+' datafile

egrep '2\.?[0-9]' datafile

egrep '(no)+' datafile

egrep 'S(h|u)' datafile

egrep 'Sh|u' datafile



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

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

相关文章

​分享1.36G全国村名点数据

数据是GIS的血液&#xff01; 我们在《2015年中国电子地图数据》一文中&#xff0c;为大家有偿分享了一份图层丰富&#xff0c;且有26.8G大小的全国电子地图。 这里再为大家分享一份有1.36G大小的全国村名数据&#xff0c;本数据来自网友分享&#xff0c;据说为2023年的村名数…

VMware 替代专题|14 个常见问题,解读 VMware 替代的方方面面

随着 VMware by Broadcom 调整订阅模式和产品组合&#xff0c;不少用户也将 VMware 替代提上日程。为了帮助用户顺利完成从 VMware 替代方案评估到产品落地的一系列环节&#xff0c;我们通过这篇博客&#xff0c;对 VMware 替代场景下用户经常遇到的问题进行了梳理和解答。 更…

【工作记录】openjdk-22基础镜像的构建

背景 近期使用到的框架底层都用的是springboot3.0&#xff0c;要求jdk版本在17甚至更高。 于是决定制作一个基于openjdk22的基础镜像&#xff0c;本文对这一过程进行记录。 作为记录的同时也希望能够帮助到需要的朋友。 期望效果 容器内可以正常使用java相关命令且版本是2…

再议大模型微调之Zero策略

1. 引言 尽管关于使用Deepspeed的Zero策略的博客已经满天飞了&#xff0c;特别是有许多经典的结论都已经阐述了&#xff0c;今天仍然被问到说&#xff0c;如果我只有4块40G的A100&#xff0c;能否进行全量的7B的大模型微调呢&#xff1f; 正所谓“纸上得来终觉浅&#xff0c;…

华为OD机试【路灯照明问题】(java)(100分)

1、题目描述 在一条笔直的公路上安装了N个路灯&#xff0c;从位置0开始安装&#xff0c;路灯之间间距固定为100米。 每个路灯都有自己的照明半径&#xff0c;请计算第一个路灯和最后一个路灯之间&#xff0c;无法照明的区间的长度和。 2、输入描述 第一行为一个数N&#xff…

一文了解什么是SSL证书?——值得收藏

SSL证书&#xff0c;全称Secure Sockets Layer证书&#xff0c;是一种网络安全协议的实现方式&#xff0c;现在通常指的是其继任者TLS&#xff08;Transport Layer Security&#xff09;证书&#xff0c;不过习惯上仍称为SSL证书。它的主要作用是确保互联网上的数据传输安全&am…

ESP32 IDF linux下开发环境搭建

文章目录 介绍升级Python环境下载Python包配置编译环境及安装Python设置环境变量 ESPIDF环境搭建下载esp-idf 代码编译等待下载烧录成功查看串口打印 介绍 esp32 官方文档给的不是特别详细 参考多方资料 最后才完成开发 主要问题在于github下载的很慢本教程适用于ubuntu deban…

HarmonyOS实战开发-如何实现查询当前城市实时天气功能

先来看一下效果 本项目界面搭建基于ArkUI中TS扩展的声明式开发范式&#xff0c; 数据接口是和风&#xff08;天气预报&#xff09;&#xff0c; 使用ArkUI自带的网络请求调用接口。 我想要实现的一个功能是&#xff0c;查询当前城市的实时天气&#xff0c; 目前已实现的功能…

5.合并两个有序数组

文章目录 题目简介题目解答解法一 &#xff1a;合并后排序解法二&#xff1a;双指针排序 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 合并两个有序数组 相关的讲解&#xff01;&#x1f600; 题目简介 题目解答 解法一 &#xff1a;合并后排序 假设我们要合…

每日OJ题_贪心算法三⑤_力扣134. 加油站

目录 力扣134. 加油站 解析代码 力扣134. 加油站 134. 加油站 难度 中等 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一…

Redis学习(十)|使用消息队列的重试机制实现 MySQL 和 Redis 的数据一致性

文章目录 介绍原理整体方案实现步骤示例代码总结其他&#xff1a;Kafka 重试策略配置1. 生产者重试策略配置2. 消费者重试策略配置 介绍 在分布式系统中&#xff0c;保持 MySQL 和 Redis 之间的数据一致性是至关重要的。为了确保数据的一致性&#xff0c;我们通常采取先更新数…

红外与可见光图像融合评价指标(cddfusion中的代码Evaluator.py)

一、Evaluator.py全部代码&#xff08;可正常调用&#xff09; import numpy as np import cv2 import sklearn.metrics as skm from scipy.signal import convolve2d import math from skimage.metrics import structural_similarity as ssimdef image_read_cv2(path, modeRGB…

minio上传文件失败如何解决

1. 做了什么操作 通过接口上传excel文件&#xff0c;返回响应值 2. 错误如图 2. 如何解决 根据错误描述定位到了部署minio的地方minio通过docker部署&#xff0c;找到docker - compose发现配置文件中minio有两个端口&#xff0c;一个是用于api的&#xff0c;一个是用于管理界面…

AI模型:windows本地运行下载安装ollama运行Google CodeGemma可离线运行数据模型【自留记录】

AI模型&#xff1a;windows本地运行下载安装ollama运行Google CodeGemma可离线运行数据模型【自留记录】 CodeGemma 没法直接运行&#xff0c;需要中间软件。下载安装ollama后&#xff0c;使用ollama运行CodeGemma。 类似 前端本地需要安装 node.js 才可能跑vue、react项目 1…

QX-mini51学习---(2)点亮LED

目录 1什么是ed 2led工作参数 3本节相关原理图分析 4本节相关c 5实践 1什么是ed 半导体发光二极管&#xff0c;将电能转化为光能&#xff0c;耗电低&#xff0c;寿命长&#xff0c;抗震动 长正短负&#xff0c;贴片是绿点处是负极 2led工作参数 3本节相关原理图分析 当…

工业网关设备的种类、功能及其在各种工业场景中的应用-天拓四方

在快速发展的工业信息化时代&#xff0c;工业网关设备作为连接工业设备与云平台的桥梁&#xff0c;发挥着至关重要的作用。本文将详细介绍工业网关设备的种类、功能以及其在各种工业场景中的应用&#xff0c;帮助广大读者更深入地了解这一重要设备。 一、工业网关设备的种类 …

【Linux 基础 IO】文件系统

文章目录 1.初步理解文件2.C语言环境下的文件操作2.1 C库中 fopen、fwrite 的讲解2.2 C文件操作的实例 3.系统调用接口的讲解 1.初步理解文件 &#x1f427;① 打开文件&#xff1a; 本质是进程打开文件&#xff0c;只有程序运行起来文件才被打开&#xff1b; &#x1f427;②文…

Fizzler库+C#:从微博抓取热点的最简单方法

概述 在这篇技术文章中&#xff0c;我们将深入研究如何利用Fizzler库结合C#语言&#xff0c;以实现从微博平台抓取热点信息的功能。微博作为中国乃至全球范围内具有重要影响力的社交媒体平台之一&#xff0c;在互联网信息传播中扮演着举足轻重的角色。通过Fizzler这一强大的.N…

【探索Java编程:从入门到入狱】Day4

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

电费自动抄表是什么?什么叫电费自动抄表?

1.电费自动抄表&#xff1a;简述 电费自动抄表是一种现代化电力工程管理方法&#xff0c;根据远程系统收集解决电度表数据&#xff0c;取代了传统的人工抄水表方法。这项技术提高了效率&#xff0c;降低了不正确&#xff0c;并且为消费者和电力公司提供了更多服务项目概率。 …
最新文章