Linux之shell文本搜索工具grep

news/2024/7/5 4:27:44

华子目录

  • 文本搜索工具grep
    • 作用
    • 格式
    • 参数
    • 注意
    • 示例
  • 正则表达式
    • 概念
    • 基本正则表达式
    • 常见元字符
    • posix字符类
    • 示例
  • 扩展正则表达式
    • 概念
    • 元字符
    • 示例
      • ==三种支持扩展正则的方法==

文本搜索工具grep

作用

  • grep是linux中一种强大的文件搜索过滤工具,可以按照正则表达式检索文件内容,并把匹配的结果显示到屏幕上(匹配的内容会标红)

格式

[root@server ~]# grep   -参数   条件  文件名
#条件就相当于检索的内容

参数

参数功能
-i忽略大小写
-c统计匹配的行数
-v取反,不显示匹配的行
-w匹配整个单词,精确匹配
-E等价于egrep,即启用扩展正则表达式
-n显示行号
-rl将指定目录内的文件打印
-A数字匹配行及以下n行
-C数字匹配行及上下n行
-B数字匹配行及以上n行
-q静默模式,没有任何内容输出,使用$?来判断是否执行成功
-o只显示匹配的内容

注意

  • 工作方式grep可以在一个多个文件检索,如果条件中包含了空格,需要使用双引号引起
  • 工作结果:如果搜索成功则返回0状态码,否则为1状态码

示例

  • 操作对象文件:/etc/passwd
    • 作用:记录账户的信息,共分为7段,使用冒号分割
    • 意义:账户名:密码代号x:UID:GID:注释:家目录:登录的Shell
    • 注意:最后一段/sbin/nologin表述不允许登录
[root@server ~]# grep -n "root" /etc/passwd   #-n显示行号
[root@server ~]# grep  -n  "sshd"  /etc/passwd
[root@server ~]# grep  -n  "/sbin/nologin"  /etc/passwd


[root@server ~]# grep  -c  "/bin/bash"  /etc/passwd  #显示匹配的行数
12
[root@server ~]# grep "/bin/bash" /etc/passwd | wc -l
12


[root@server ~]# grep -nv "/sbin/nologin" /etc/passwd  #-v取反,表示可以登录的

[root@server ~]# grep  -ni  "d"  /etc/passwd  #-i忽略大小写

[root@server ~]# grep -nA2 "ftp" /etc/passwd  ##包含ftp的行以及以下2行

[root@server ~]# grep -nB3 "ftp" /etc/passwd  #包含ftp的行以及以上3行

[root@server ~]# grep  -nC3  "ftp"  /etc/passwd  #包含ftp的行以及以上下3行

正则表达式

概念

  • 在进行程序设计的过程中,用户会不可避免地遇到处理某些文本的情况。有的时候,用户还需要查找符合某些比较复杂规则的字符串。对于这些情况,如果单纯依靠程序设计语言本身,则往往会使得用户通过复杂的代码来实现。但是,如果使用正则表达式,则会以非常简短的代码来完成
  • 正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串,简单的说,正则表达式就是用在字符串的处理上面的一项表示式。由于正则表达式语法简练,功能强大,得到了许多程序设计语言的支持,包括Java、C++、Perl以及Shell等

基本正则表达式

  • 基本正则表达式(Basic Regular Expression,BRE),又称为标准正则表达式,是最早制订的正则表达式规范,仅支持最基本的元字符集。基本正则表达式是POSIX规范制订的两种正则表达式语法标准之一,另外一种语法标准称为扩展正则表达式

常见元字符

元字符说明
^以某个字符开头或行首
$以某个字符结尾或结尾
.匹配任意字符
*对前一项进行0次或多次重复匹配
{m,n}将前一项字符重复m-n次,{m,}{,n}{m,n}
[]对方括号内的单字符进行匹配
[^]对方括号内的范围取反
1匹配以某个字符开头的行
()定义一个子表达式
词首【\<或\b】和词尾锚定【\>或者\b】其后面的任意字符必须作为单词首部出现;其前面的任意字符必须作为单词尾部出现
\转义字符,让一些特殊符号失效

posix字符类

  • POSIX字符类是一个形如[:...:]的特殊元序列(meta sequence),他可以用于匹配特定的字符范围
正则表达式描述示例
[:alnum:]匹配任意一个字母数字字符[[:alnum:]]+
[:alpha:]匹配任意一个字母字符(包括大小写字母)[[:alpha:]]
[:blank:]空格与制表符(横向和纵向)[[:blank:]]*
[:digit:]匹配任意一个数字字符[[:digit:]]?
[:lower:]匹配小写字母[[:lower:]]
[:upper:]匹配大写字母([[:upper:]]+)?
[:punct:]匹配标点符号[[:punct:]]
[:space:]匹配一个包括换行符、回车等在内的所有空白符[[:space:]]+
[:graph:]匹配任何一个可以看得见的且可以打印的字符[[:graph:]]
[:xdigit:]任何一个十六进制数(即:0-9,a-f,A-F)[[:xdigit:]]+
[:cntrl:]任何一个控制字符(ASCII字符集中的前32个字符)[[:cntrl:]]
[:print:]任何一个可以打印的字符[[:print:]]

示例

  • [ab] : 检索包含a或者b的行信息,[]只能包含一个内容
[root@server ~]# grep  -n  [dD]  /etc/passwd
[root@server ~]# grep  -n  [oo]  /etc/passwd
  • [^]:根据关键字反向显示(反向着色)
[root@server ~]# grep  -n  [^o]  /etc/passwd
[root@server ~]# grep  -n  [^r]oot  /etc/passwd
  • [-]:表示范围,如:[0-9] [a-z] [A-Z] [a-zA-Z]
[root@server ~]# grep  -nw  [7-9]  /etc/passwd  #-w精确匹配整个范围

[root@server ~]# grep  -n  [A-Z]  /etc/passwd

[root@server ~]# grep  -n  [A-G]  /etc/passwd

[root@server ~]# grep  -n  [0-9A-Za-z]  /etc/passwd

[root@server ~]# grep  -n  [[:alnum:]]  /etc/sos/sos.conf #匹配字母,数字
  • ^行首与$行尾
[root@server ~]# grep -n  ^root  /etc/passwd  #匹配以root开头的行

[root@server ~]# grep  -n  ^#  /etc/sos/sos.conf   # 检索以#开头的注释行

[root@server ~]# grep  -n  "^\["  /etc/sos/sos.conf #\进行转义

[root@server ~]# grep  -n  "[0-9]$"   /etc/sos/sos.conf   #匹配以数字结尾的行

[root@server ~]# grep  -n  "^$"   /etc/sos/sos.conf #匹配空白行

[root@server ~]# grep  -n  ^[root]  /etc/passwd # 检索以r或o或t开头的不是root开头

[root@server ~]# grep  -n  ^root  /etc/passwd  # 整体对待

[root@server ~]# grep  -n  [^root]  /etc/passwd  # 检索不包含r或不包含o或不包含t,进行反向着色,注意:^[] 与  [^] 区别
  • 点(.)与星号(*)
[root@server ~]# grep  -n  r..t  /etc/passwd  #.代表匹配任意一个字符

[root@server ~]# grep  -n  ooo*    /etc/passwd  #*表示对前一项进行0次或多次重复匹配

[root@server ~]# grep  -n  "\."    /etc/passwd  #\进行转义
  • {m,n} 区间
[root@server ~]# grep  -n  "\<[0-9]\{2\}\>"  /etc/passwd
# {m,n}  描述区间

扩展正则表达式

概念

  • 扩展正则表达式(Extended Regular Expression,ERE)支持比基本正则表达式更多的元字符,但是扩展正则表达式对有些基本正则表达式所支持的元字符并不支持。前面介绍的元字符“^”、“$”、“.”、“*”、“[]”以及“[^]”这6个元字符在扩展正则表达式都得到了支持,并且其意义和用法都完全相同,不再重复介绍。接下来重点介绍一下在扩展正则表达式中新增加的一些元字符。

元字符

元字符说明
将前一项字符进行0次或者1次的重复匹配
+将前一项进行1次或者多次的重复匹配
(|)匹配|符号左边或者右边的字符,整体精确匹配

示例

[root@server ~]# grep  -n  "bash$"  /etc/passwd

[root@server ~]# grep  -n  "\<[[:digit:]]\{3,4\}\>"  /etc/passwd

[root@server ~]# grep  -n  "\<[0-9]\{3,4\}\>"  /etc/passwd

三种支持扩展正则的方法

[root@server ~]# egrep  -n  "^[[:space:]]+[^[:space:]]"  /etc/grub2.cfg 

[root@server ~]# grep  -nE  "^[[:space:]]+[^[:space:]]"  /etc/grub2.cfg 

[root@server ~]# grep  -n  "^[[:space:]]\+[^[:space:]]"  /etc/grub2.cfg 

注意:grep不支持扩展正则(? + (|)),要想生效,可以使用上述三种方法

# 将netstat  -tan显示结果中以LISTEN开头后跟0个或多个空白字符结尾的行信息
[root@server ~]# netstat  -tan  |  grep  "LISTEN[[:space:]]*$"
# 检索fdisk -l 命令结果中,包含/dev/开头后跟上n的行信息
[root@server ~]# fdisk -l  |  grep  "^/dev/n"
# 显示/etc/passwd中包含root、sshd、chrony的相关信息
[root@server ~]# egrep  -n  "(root|sshd|chrony)"  /etc/passwd
[root@server ~]# grep   -nE  "(root|sshd|chrony)"  /etc/passwd
# 检索ifconfig显示信息中结果为1-255间的整数
[root@server ~]# ifconfig |  egrep -o  "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]  )\>"   
# 取出echo输出的绝对路径名中的文件名
[root@server ~]# echo  /etc/yum.repos.d   |  egrep  [^/]+/?$
[root@server ~]# echo  /etc/yum.repos.d   |  egrep -o [^/]+/?$

  1. ↩︎


http://lihuaxi.xjx100.cn/news/2100983.html

相关文章

UG NX二次开发(C++)-CAM-获取加工操作的四种方法

文章目录 1、前言2、采用选中工序导航器获取操作的Tag_t3、采用遍历对象的方法获取操作的Tag_t4、采用Collection遍历获取操作对象NXOpen::CAM::Operation5、采用FindObject获取操作对象NXOpen::CAM::Operation6、以上4种方法封装成类 Class CAMOperation6.1 CAMOperation.h文件…

用pako.js压缩字符串,如何在后端用java解开?

背景&#xff1a;项目链路为腾讯clb->Ingress(nginx)->项目服务,腾讯的Ingress对header请求头最大值为256K&#xff0c;无法加大&#xff0c;由于业务配置数据增加&#xff0c;此问题诟病已久&#xff0c;于是想着压缩打请求头数据后再请求&#xff0c;从而解决请求头大的…

一套为中小电商企业构建的、开源的、简单实用的ERP系统需要接入的电商API接口以及实现的功能模块分析

一、项目简介 电商ERP系统为中小电商企业构建的一套简单实用的电商系统&#xff0c;本项目采用Java SpringBootVue2前后端分离开发。 支持供应商一件代发和仓库发货两种发货方式&#xff0c;主体流程覆盖采购、网店订单处理、供应商一件代发、仓库发货、网店售后、仓库出入库、…

[C++] 实现Union

前几天学了replacement new写的小玩意 #include <iostream> #include <functional> #include <string>// 可能因为const char*类型的缘故 // 用const ArgsT&&...会报错// 测试用类 struct Test {Test(){std::cout << "constructed"…

Unity2019.2.x 导出apk 安装到安卓Android12+及以上的系统版本 安装出现-108 安装包似乎无效的解决办法

Unity2019.2.x 导出apk 安装到安卓Android12及以上的系统版本 安装出现-108 安装包似乎无效的解决办法 导出AndroidStudio工程后 需要设置 build.gradle文件 // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAINbuildscript {repositor…

【洛谷 P8602】[蓝桥杯 2013 省 A] 大臣的旅费 题解(图论+深度优先搜索+树的直径+链式前向星)

[蓝桥杯 2013 省 A] 大臣的旅费 题目描述 很久以前&#xff0c;T 王国空前繁荣。为了更好地管理国家&#xff0c;王国修建了大量的快速路&#xff0c;用于连接首都和王国内的各大城市。 为节省经费&#xff0c;T 国的大臣们经过思考&#xff0c;制定了一套优秀的修建方案&am…

sqllab第二十六关通关笔记

知识点&#xff1a; 空格替换 %09 %0a %0b %0c %0d %a0 (%2b)or替换&#xff1a;|| ||是不需要空格区分的and替换&#xff1a;&& &&同样不需要空格区分的双写绕过&#xff0c;但是绕过后需要和内容进行空格区分的&#xff0c;要不然不发挥作用&#xff1b;这关…

npm设置淘宝镜像地址

介绍 npm设置淘宝镜像 命令 npm config set registry https://registry.npmmirror.com/