三剑客之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 ]; thenecho "Match found"
elseecho "No match found"
fi2.使用 && 和 ||
返回值也可以与逻辑操作符结合,用于更简洁的控制流程。
# 如果找到匹配的行,打印 "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 ]; thenecho "Error occurred"
fi4.结合 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.txtegrep 'NW' d*.txtegrep '^n' datafile.txtegrep '4$' datafile.txtegrep TBSavage datafile.txtegrep 'TB Savage datafile.txt'egrep '5\..' datafile.txtegrep '\.5' datafile.txtegrep '^[we]' datafile.txtegrep '[^0-9]' datafileegrep  '[A-Z][A-Z] [A-Z]' datafileegrep 'ss*' datafileegrep '[a-z]{9}' datafileegrep '\<north' datafileegrep '\<north\>' datafileegrep '\<[a-r].*n\>' datafileegrep '^n\w*\W' datafileegrep '\bnorth\b' datafileegrep 'NW|EA' datafileegrep '3+' datafileegrep '2\.?[0-9]' datafileegrep '(no)+' datafileegrep 'S(h|u)' datafileegrep 'Sh|u' datafile

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp的app端推送功能,不使用unipush

1&#xff1a;推送功能使用htmlPlus实现&#xff1a;地址HTML5 API Reference (html5plus.org) 效果图&#xff1a; 代码实现&#xff1a; <template><view class"content"><view class"text-area"><button click"createMsg&q…

什么是DDoS攻击?DDoS攻击的原理是什么?

一、DDoS攻击概念 DDoS攻击又叫“分布式拒绝服务”(Distributed DenialofService)攻击&#xff0c;它是一种通过控制大量计算机、物联网终端或网络僵尸&#xff08;Zombie&#xff09;来向目标网站发送大量请求&#xff0c;从而耗尽其服务器资源&#xff0c;导致正常用户无法访…

设计网页用什么软件

在设计网页时&#xff0c;可以使用多种软件来完成不同的任务。以下是一些常用的网页设计软件&#xff0c;以及它们的特点和用途。 1. Adobe Photoshop&#xff1a; Adobe Photoshop 是一款功能强大的图像编辑软件。在网页设计中&#xff0c;它常用于创建和编辑网页所需的图像、…

详细介绍如何在Windows系统上安装Anaconda

**一、引言** Anaconda是一个开源的Python发行版本&#xff0c;它包含了conda、Python等180多个科学包及其依赖项。Anaconda的优点在于它可以帮助用户解决安装包的依赖问题&#xff0c;方便用户管理多个环境&#xff0c;并且提供了一个完整的科学计算环境。本指南将详细介绍如…

手动配置dns后网速变慢

之前因为自动的dns能上qq但打不开网页&#xff0c;就手动设置了一个&#xff0c;结果近些天时不时出现网页图片加载慢的问题&#xff0c;影响到我看美女图片了&#xff0c;是可忍熟不可忍 测了下网速&#xff0c;很快&#xff0c;下载上传都是三位数的&#xff0c;那显然不是网…

element+ant 组件点

ant中table设置默认排序 a-table中的:column属性,设置对应的列上 item.sortOrder params.sort_type asc ? ascend : descend 判断ant-table中是否有横向坐标轴 const hasHorizontalScrollbar() > {const table document.querySelector(.ant-table-content);//可修改,…

RabbitMQ是如何保证消息可靠性的?——Java全栈知识(16)

RabbitMQ 的消息不可靠也就是 RabbitMQ 消息丢失只会发生在以下几个方面&#xff1a; 生产者发送消息到 MQ 或者 Exchange 过程中丢失。Exchange 中的消息发送到 MQ 中丢失。消息在 MQ 或者 Exchange 中服务器宕机导致消息丢失。消息被消费者消费的过程中丢失。 大致就分为生…

Star-CCM+分配零部件至区域1-将所有零部件分配至区域

前言 Star-CCM中&#xff0c;在划分网格之前需要将零部件分配至区域&#xff0c;然后才可以划分网格。如下图1所示&#xff0c;分配零部件至区域需要选择创建区域的方式、创建边界的方式以及交界面的类型。 图1 将零部件分配至区域 1 创建区域的方式选择 如下图2所示&#x…

基于Spring Boot的家具网站设计与实现

基于Spring Boot的家具网站设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 系统前台主界面图&#xff0c;用户可进入家具网站可查看…

RFC 791 (2) - Overview

目录 总览 操作 Addressing 与 Fragmentation Addressing Fragmentation 总览 RFC791文档的第二部分就是对IP进行总浏览&#xff1a;可以看到&#xff0c;我们的五层划分是这样的&#xff1a; ------ ----- ----- ----- |Telnet| | FTP | | TFTP| ... | ... | -----…

【Linux深度学习笔记5.7】

5.6学习笔记 文件查找: 语法:find $路径 name | type | perm | size | atime | mtime | ctime 操作对象find /opt/ -name a.txt ----> -iname (忽略大小写)find / -perm 000 ----> 权限查找find / -size 5M ----> 大小查找 5M (大于5M) -5M (小于5M)find /etc/…

探索大模型能力--prompt工程

1 prompt工程是什么 1.1 什么是Prompt&#xff1f; LLM大语言模型终究也只是一个工具&#xff0c;我们不可能每个人都去训一个大模型&#xff0c;但是我们可以思考如何利用好大模型&#xff0c;让他提升我们的工作效率。就像计算器工具一样&#xff0c;要你算10的10倍&#x…

Java IO类之FilterOutputStream的研究与应用

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

mybatis-plus编程接口

简介 使用Java语言对数据库进行操作&#xff0c;通常需要继承一些依赖Spring容器的ORM框架。在后端项目中非常高效且稳定。但对于一些客户端或者一些临时任务&#xff0c;非Spring环境下想对数据库进行简单的CRUD通常需要使用JDBC来实现&#xff0c;这种方式要自己拼接SQL&…

C语言中static和volatile关键字的作用

static 作用&#xff1a; 1 修饰局部变量&#xff1a;表示该局部变量只初始化一次&#xff0c;地址空间不释放 2 修饰全局变量&#xff1a;表示该全局变量只在此文件中使用&#xff0c;别的文件无法访问此变量 3 修饰函数&#xff1a; 表示修饰的函数只在此文件中使用&#xff…

RCE学习(一)

一.知识点 RCE&#xff1a;远程命令/代码执行漏洞&#xff0c;简称为RCE漏洞&#xff0c;可以直接向服务器后台远程注入操作系统的命令或者代码&#xff0c;从而拿到服务器后台的权限。RCE分为远程执行命令&#xff08;执行ping命令&#xff09;和远程代码执行eval 简单来说就…

VMware导入ova/ovf虚拟机文件

1.文件-打开-ova文件 2.为新虚拟机起名称 3.等待导入 4.导入完成&#xff0c;可以开始使用 参考链接&#xff1a;VMware导入ova/ovf虚拟机文件

浅谈Session和Cookie

各位大佬光临寒舍&#xff0c;希望各位能赏脸给个三连&#xff0c;谢谢各位大佬了&#xff01;&#xff01;&#xff01; 目录 1.Cookie 2.Sesssion&#xff08;会话&#xff09; 3.Session和Cookie的联系 4.总结 1.Cookie Cookie是客户端存储数据的机制&#xff0c;一般是…

洛谷P10397题解

题目描述 给定一条 std::freopen 语句&#xff0c;输出其操作的文件名称。 形式化地&#xff0c;std::freopen 语句都应该恰好是 std::freopen("<title>","<mode>",<stream>);其中 <title> 为其操作的文件名称。其至少包含一个…

英语学习笔记5——Nice to meet you.

Nice to meet you. 很高兴见到你。 词汇 Vocabulary Mr. 先生 用法&#xff1a;自己全名 / 姓 例如&#xff1a;Mr. Zhang Mingdong 或 Mr. Zhang&#xff0c;绝对不能是 Mr. Mingdong&#xff01; Miss 女士&#xff0c;小姐 未婚 用法&#xff1a;自己全名 / 姓 例如&#…