【Linux】grep 命令详解

article/2025/11/11 12:26:11

文章目录

  • 一、grep常用命令
    • 1、语法
    • 2、范例
  • 二、grep的一些高级参数
    • 1、语法
    • 2、范例
  • 三、基础正则表达式练习
    • 1、与中括号` [] `结合
    • 2、与反向选择^结合使用
    • 3、与行首 `^` 和行尾 $ 字符结合
    • 4、任意一个字符` . `与重复字符` * `
    • 5、` {} `限定连续字符范围

一、grep常用命令

grep的功能是分析一行信息,若其中有我们所需要的信息,就将其拿出来。

需要注意的是它以整行为单位进行数据的选取。

1、语法

grep [-acinv] [--color=auto]  '要查找的字符串'  filename
参数说明
-a将binary文件以text文件的方式查找数据
-c计算找到查找字符串的次数
-i忽略大小写的不同
-n输出行号
-v反向选择,显示出没有查找字符串的内容的行
–color-auto将找到的字符串以特殊颜色显示

2、范例

1、先将/etc目录下的man.config文件拷贝至/tmp文件夹下,来作实验:

cd  /tmp
cp  /etc/man.config  .

2、将此文件中有包含MANPATH的那一行取出来。

cat manpath.config | grep 'MANPATH'

3、与上例子相反,只要没有包含MANPATH的那一行就取出来。

cat manpath.config| grep -v 'MANPATH'

二、grep的一些高级参数

1、语法

grep [-A] [-B] [--color=auto]  '查找字符串' filename'
  • -A:后面可加数字,为after的意思,除了列出该行以外,后续的n行也列出来。
  • -B:后面可加数字,为before的意思,除了列出该行以外,前面的n行也列出。

2、范例

1、用dmesg列出内核信息,然后用grep找出包含eth的那行,并且显示行号。而且将关键字的前2行和后3行也列出来。

dmesg | grep -n -A3 -B2 --color=auto 'eth'

其中的 | 是管道符,用于把左边输出的内容传递给右边的命令
在这里插入图片描述

在关键字的显示上,grep可以用—color=auto来将关键字用特殊颜色显示。但是每次使用grep都得加上这个信息很麻烦,于是可以用alias进行一下处理就OK了。

可以在~/.bashrc内加上这一行:alias grep=‘grep –color=auto’。

三、基础正则表达式练习

1、与中括号[]结合

  • 查找包含[]中某一个字符的内容
比如我要查找man或者men字符串,可以这样来查找:
grep -n  'm[ae]n'  manpath.config查找包含man且man前面有数字的行:
grep -n '[0-9]man'  manpath.config

Note:中括号[]里面不论有几个字符,它都只代表某一个字符。

2、与反向选择^结合使用

  • 查找不包含指定字符的内容
查找包含man而且前面没有/的那一行:
grep -n  '[^/]man'  manpath.config

在这里插入图片描述

查找包含man但是前面不是小写字符的那一行:
grep -n  '[^a-z]man'  manpath.config

3、与行首 ^ 和行尾 $ 字符结合

列出行首为MANPATH_MAP的行:
grep -n  '^MANPATH_MAP' manpath.config列出开头是大写字符的那一行:
grep -n '^[A-Z]' manpath.config列出开头不是英文字母的行:
grep -n  '^[^a-zA-Z]'  manpath.config

^ 符号在字符集合(中括号[])之内和外面是不同的!!!

[]里面代表反向选择,在[]外面代表定位在行首的意思

反过来思考,使用$来查找行尾字符

找出行尾结束符为点.的行:
grep -n '\.$' manpath.config
因为小数点具有特殊的意义,所以必须用转义字符加以解除其特殊意义。查找出空白行:
grep -n  '^$'  manpath.config

4、任意一个字符.与重复字符*

在bash当中,通配符*可以用来代表任意(0或多个)字符,但是正则表达式并不是通配符,两者之间是不相同的。

在正则表达式当中:

  • .代表绝对有一个字符的意思
  • *代表重复前一个字符0到无穷多次的意思,为组合形态

实例:

查找包含一个o以上的行,需要oo*:
grep -n 'oo*' manpath.config查找以g开头与以g结尾,中间至少存在一个o的行:
grep -n  'goo*g'  manpath.config

5、{}限定连续字符范围

我们可以利用.*来设置0到无穷多个重复字符。那如果要限制一个范围区间内的重复字符呢?

比如要找出2-5个o的连续字符串,就要用到限定范围的字符{}了。

但是{}的符号在shell有特殊意义,因此要用到转义字符\。

实例:

找出g后面有两个到五个o,后面再接一个g的字符串:
grep -n 'go\{2,5\}g'  manpath.config如果是2个以上呢:
grep -n  'go\{2,\}g'  manpath.config
这样就OK了。

http://chatgpt.dhexx.cn/article/24vqVEGs.shtml

相关文章

【WINDOWS / DOS 批处理】for命令详解(八)

for命令详解(一)【共十篇】 for命令详解(二)【共十篇】 for命令详解(三)【共十篇】 for命令详解(四)【共十篇】 for命令详解(五)【共十篇】 fo…

【WINDOWS / DOS 批处理】for命令详解(一)

for命令详解(一)【共十篇】 for命令详解(二)【共十篇】 for命令详解(三)【共十篇】 for命令详解(四)【共十篇】 for命令详解(五)【共十篇】 fo…

批处理 bat for 详解

一、前言 在批处理中,for是最为强大的命令语句,它的出现,使得解析文本内容、遍历文件路径、数值递增/递减等操作成为可能;配合if、call、 goto等流程控制语句,更是可以实现脚本复杂的自动化、智能化操作;合…

批处理for循环命令初步学习

1 基本格式 DOS批处理for循环语句的基本格式是, for /参数 %变量 in (集) do 命令 参数:FOR分四种参数 D L R F; 变量:变量名是由单个字母组成且区分大小写(原帮助是这么说的,实际运用中用单个数字作为…

BAT批处理文件 for命令详解

Windows bat脚本的for语句基本形态如下: 在cmd窗口中:for %I in (command1) do command2 在批处理文件中:for %%I in (command1) do command2之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,命令语句…

jenkins配置中执行 ant 命令时,提示找不到ant 命令

1.在服务器上手动执行ant ,则可以正常执行,但是使用jenkins 构建时却提示无法识别ant命令 查询了相关原因为:jenkins默认情况下执行shell脚本是使用非登录方式,然而非登录方式不会加载 /etc/profile 文件,且ant_home 此…

Ant的使用简介

Ant的使用简介 1、Ant简介 ApacheAnt是一个基于Java的构建工具。是一个将软件编译、测试、部署等步骤想结合并加以自动化的一个工具,大多用于Java环境中的软件开发。目前主要的Java ide都带有Ant,产品如Eclipse、NetBeans和IntelliJ IDEA。 理论上&…

openfire运行ant命令控制台中文乱码问题

最近项目要使用openfire来进行插件开发,下载openfire源码导入工程后,运行源码的build目录下的build.xml中的ant命令,其中run命令是启动openfire服务器,结果控制台输出乱码,如图所示: run命令的原始ant脚本是…

使用Ant打包工具

由于使用java,javac,jar等工具进行编译打包,即繁琐低效又容易出错,因此Ant出现了。Ant的出现就是专门为了打包编译java代码的,使用之前得稍微学一下。Ant的运行起来主要是依靠配置文件(XML格式),通常命名为…

ant命令征集详解

ANT指令build.xml命令集 1.ANT示例1.0(将指定路径下的文件复制到指定的其他位置) <?xml version"1.0" encoding"UTF-8" ?> <project name"antTest" default"compile" basedir"."><target name"clean…

Ant企业使用(二)------ant命令及使用

上节说到ant的部署安装&#xff0c;下面呢咱们开始介绍下ant命令以及使用&#xff1a;一.ant命令 语法元素说明如下&#xff1a; -help 显示描述ant 命令及其选项的帮助信息 -projecthelp 显 示包含在构建文件中的、所有用户编写的帮助文档。即为各个中description 属性的文…

简单的Ant命令

使用Ant打印一句话 1.最简单的打印方法 新建build.xml文件&#xff0c;在该文件输入一下内容&#xff1a; <project default"main target" name"first project"> <target name"main target"><echo>this is my firt ant pri…

ant使用总结(二):相关命令说明

在ant安装目录的manual目录是ant的说明文档&#xff0c;打开index.xml&#xff0c;点击Using Apache ant有使用说明。 相关命令说明 指定配置文件 执行ant命令&#xff0c;默认使用当前目录下的build.xml&#xff0c;可以通过-f指定配置文件。 示例&#xff1a;ant -f 配置文件…

DatabaseMetaData 获取数据表字段注释内容

使用DataBaseMetaData获取mysql表字段注释 DatabaseMetaData metaData connection.getMetaData(); ResultSet rs null; rs metaData.getColumns(dbName, null, tableName, "%");while (rs.next()) { QueryColumn columnnew QueryColumn(rs.getString…

Spring boot项目中DatabaseMetaData方式获取表字段信息

日常工作中我们可能会遇到一些配置化的功能&#xff0c;比如我们需要根据元数据项动态生成一些模板&#xff0c;比如表格&#xff0c;excel等&#xff0c;这些都需要我获取到数据库表中字段长度、类型、格式等信息。下面就以一个小白的身份和大家分享下自己的实现过程。 背景 …

Java中DataBaseMetaData与ResultMetaData基本使用

java中的DataBaseMetaData与ResultMetaData使用&#xff1a; DataBaseMetaData 类对象通过Connection类对象获取 1&#xff0c; 获取数据库的url 2&#xff0c; 获取用户名 3&#xff0c; 获取有哪些数据库 package com.xzq.jdbc;import com.xzq.dbutils.DbUitl;import java.s…

DatabaseMetaData.getIndexInfo

示例 通过 DatabaseMetaData.getIndexInfo&#xff08;&#xff09; 获取索引信息。 public static void getIndexInfo() throws Exception {Connection conn getConnection();ResultSet rs null;try {DatabaseMetaData dbmd conn.getMetaData();rs dbmd.getIndexInfo(&q…

数据库元数据 DatabaseMetaData

一、元数据介绍 &#xff08;数据库元数据 DatabaseMetaData&#xff09; 数据库元数据指的是"数据库的定义信息。 DataBaseMetaData元数据获取方式 通过Connection.getDatabaseMetaData()方法获得代表DatabaseMetaData元数据的DatabaseMetaData对象。DataBaseMetaData…

DatabaseMetaData类的getTable()、getColumns()方法使用,以及参数的传递问题,针对oracle、mysql、postgres三种数据库进行举例

DatabaseMetaData类 DatabaseMetaData实例的获取获取数据库属性的方法getTable()方法getColumns()方法关于参数一参数二传参问题 DatabaseMetaData类是java.sql包中的类&#xff0c;利用它可以获取我们连接到的数据库的结构、存储等很多信息。如&#xff1a; 1、数据库与用户&a…

数据库之元数据——DatabaseMetaData的getMetaData()方法的简单使用

DatabaseMetaData和ResultSetMetaData就是两个常用的获取数据库元数据相关信息的接口&#xff0c;本文讲解DatabaseMetaData和ResultSetMetaData接口获取元数据的方法。 package com;import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverMa…