Shell编程--grep、egrep

grep

  • 1. grep正则过滤---基本正则匹配
    • 1.1 * 0或多个
    • 1.2 \ < 词首定位符号 \ >词尾定位符号
    • 1.3 ^ 以什么开头
    • 1.4 $ 以什么结尾
    • 1.5 . 匹配单个字符
    • 1.6 .* 任意多个字符
    • 1.7 [ ] 匹配方括号中的任意一个字符
    • 1.8 [ - ] 匹配指定范围内的一个字符
    • 1.9 [^ ] 匹配不在指定组内的字符
  • 2. grep扩展正则匹配---egrep

grep命令是Globally search a Regular Expression and Print的缩写,表示进行全局的正则匹配并进行打印。
grep的相关扩展命令包括egrep和fgrep,其中egrep支持更多的正则匹配,fgrep只进行字符的匹配,不支持正则表达式。

[root@localhost ~]# grep '^#' /etc/ssh/ssh_config    //过滤以#号开头的行
[root@localhost ~]# grep '^#.*no$' /etc/ssh/ssh_config    ​//匹配以#开头,以no结尾
#ForwardAgent no
#ForwardX11 no
#RhostsRSAAuthentication no
#HostbasedAuthentication no
#GSSAPIAuthentication no
#GSSAPIDelegateCredentials no
#GSSAPIKeyExchange no
#GSSAPITrustDNS no
#BatchMode no
#Tunnel no
#PermitLocalCommand no
#VisualHostKey no
#CheckHostIP no[root@localhost ~]# grep -v '^#' /etc/ssh/ssh_config  //-v:取反,表示反向查找
[root@localhost ~]# grep 'port' /etc/ssh/ssh_config 
[root@localhost ~]# grep -i 'port' /etc/ssh/ssh_config  //-i忽略大小写
[root@localhost ~]# grep  'bash' /opt/test/    //过滤某个目录下面带有bash的行
[root@localhost ~]# grep  -r 'bash' /opt/test/  //-[r|R]表示递归查询
//递归查询:搜索当前目录和所有子目录中的文件
[root@localhost tmp]# cat a.txt
love
love you
i love you
[root@localhost tmp]# cat b.txt
do you love me
love you
i love you
[root@localhost tmp]# grep  -r "love" .     //.代表当前目录
./a.txt:love
./a.txt:love you
./a.txt:i love you
./b.txt:do you love me
./b.txt:love you
./b.txt:i love you

1. grep正则过滤—基本正则匹配

1.1 * 0或多个

[root@localhost ~]# useradd abrt 
[root@localhost ~]# grep 'abr*' /etc/passwd 
abrt:x:1041:1041::/home/abrt:/bin/bash

1.2 \ < 词首定位符号 \ >词尾定位符号

[root@localhost ~]# cat jack.txt 
Jack JACK JAck jackly jack
//以J或者j开头,以ack结尾全局(g)匹配出来的结果全部替换成123
:%s/\<[Jj]ack\>/123/g  
:%s#\<[Jj]ack\>#123#g   //即/可以用#表示

参数解释
%s/foo/bar/g:用bar替换每一行的foo
% 表示所有行
s 用来替换文本
/foo/ 指定被替换的模式
/bar/ 指定替换成的文本
/g 匹配模式出现多次时也替换

1.3 ^ 以什么开头

[root@localhost ~]# grep '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash

1.4 $ 以什么结尾

[root@localhost ~]# grep 'bash$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
confluence:x:1000:1000:Atlassian Confluence:/home/confluence:/bin/bash 
to:x:1003:1003::/home/to:/bin/bash

1.5 . 匹配单个字符

[root@localhost ~]# grep 'r..t' /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin 
[root@localhost ~]# grep 'r.t' /etc/passwd 
operator:x:11:0:operator:/root:/sbin/nologin 
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

1.6 .* 任意多个字符

[root@localhost ~]# grep 'r.*t' /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin polkitd:x:999:997:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin 
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin 
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
abrt:x:1041:1041::/home/abrt:/bin/bash

1.7 [ ] 匹配方括号中的任意一个字符

[root@localhost ~]# grep 'Root' /etc/passwd
[root@localhost ~]# grep '[Rr]oot' /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
operator:x:11:0:operator:/root:/sbin/nologin 
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin

1.8 [ - ] 匹配指定范围内的一个字符

[root@localhost ~]# grep [a-z]oot /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
operator:x:11:0:operator:/root:/sbin/nologin 
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin

1.9 [^ ] 匹配不在指定组内的字符

[root@localhost ~]# grep '[^0-9]oot' /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin[root@localhost ~]# grep '[^0-9A-Z]oot' /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
operator:x:11:0:operator:/root:/sbin/nologin 
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
[root@localhost ~]# grep '[^0-9A-Za-z]oot' /etc/passwd   //A-Z只是大写的
[root@localhost ~]#
[root@newrain ~]# useradd Root
[root@newrain ~]# grep '[A-Za-z]oot' /etc/passwd       //a-z
root:x:0:0:root:/root:/bin/bash 
operator:x:11:0:operator:/root:/sbin/nologin 
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin Root:x:1042:1042::/home/Root:/bin/bash
​
[root@localhost ~]# grep '^[rc]oot' /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
//注意:^在[]内表示取反,^在[]外表示以什么开头

2. grep扩展正则匹配—egrep

扩展正则表达式元字符功能示例
+匹配一次或多次前导字符[a-z]+ove
?匹配零次或一次前导字符lo?ve
a|b匹配a或blove|hate
x{m}字符x重复m次o{5}
x{m,}字符x重复至少m次o{5,}
x{m,n}字符x重复m到n次o{5,10}
()字符组love(able|rs)ov
[root@localhost ~]# cat  /etc/resolv.conf   //DNS配置文件
#Generated by NetworkManager
search localdomain
nameserver 223.5.5.5
nameserver 114.114.114.114//匹配4位数的数字最少出现1-3次
[root@localhost ~]# egrep '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /etc/resolv.conf
nameserver 223.5.5.5
nameserver 114.114.114.114//匹配第一位数的数字最少出现3次,后面3位数不指定出现次数
[root@localhost ~]# egrep '[0-9]{3,}.[0-9].[0-9].[0-9]' /etc/resolv.conf
nameserver 223.5.5.5//匹配4位数的数字最少出现3次
[root@localhost ~]# egrep '[0-9]{3,}.[0-9]{3,}.[0-9]{3,}.[0-9]{3,}' /etc/resolv.conf
nameserver 114.114.114.114[root@localhost ~]# ip a| egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'inet 127.0.0.1/8 scope host loinet 192.168.17.128/24 brd 192.168.17.255 scope global ens33
​
[root@localhost ~]# ifconfig| egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'inet 192.168.17.128  netmask 255.255.255.0  broadcast 192.168.17.255inet 127.0.0.1  netmask 255.0.0.0//+ 匹配一个或多个前导字符
[root@localhost ~]# egrep 'ro+t' /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
operator:x:11:0:operator:/root:/sbin/nologin 
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
​
//? 匹配零次或一次前导字符
[root@localhost ~]# egrep 'sys?' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
​
//a|b    匹配a或b
[root@localhost ~]# netstat -anlp|egrep ':80|:22'
[root@localhost ~]# egrep 'root|alice' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
​
//x{m} 字符x重复m次 
[root@localhost ~]# cat a.txt
love
love.
loove
looooove 
[root@localhost ~]# egrep 'o{2}' a.txt
loove
looooove    //这里是匹配到oooo 
[root@localhost ~]# egrep 'o{2,}' a.txt
loove
looooove 
[root@localhost ~]# egrep 'o{6,7}' a.txt

总结
没有括号看前面的一个字符
love* 出现0-n次
love? 出现0-1次
love+ 出现1-n次
love{2} 出现2次

有括号表示一个组
lo(ve)* 出现0-n次
lo(ve)? 出现0-1次
l(ove)+ 出现1-n次
lo(ve){4} 出现4次

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

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

相关文章

LInux初学之路linux的磁盘分区/远程控制/以及关闭图形界面/查看个人身份

虚拟机磁盘分配 hostname -I 查看ip地址 ssh root虚拟就ip 远程连接 win10之后才有 远程控制重新启动 reboot xshell 使用&#xff08;个人和家庭版 免费去官方下载&#xff09; init 3 关闭界面 减小内存使用空间 init 5 回复图形界面 runlevel显示的是状态 此时和上…

《微信小程序开发从入门到实战》学习八十

6.11 内部音频API 小程序播放音频的方式有两种&#xff1a;内部音频和背景音频。内部音频支持用户使用小程序时播放音频&#xff1b;背景音频支持用户离开小程序后继续播放音频。 6.11.1内部音频API 使用wx.createInnerAudioContext接口创建内部音频上下文对象。在上下文对象…

渗透测试:保障网络安全的重要手段!

随着信息技术的快速发展&#xff0c;网络安全问题日益受到关注。渗透测试作为一种重要的网络安全检测和评估方法&#xff0c;已经成为保障网络安全的重要手段之一。本文将介绍渗透测试的基本概念、流程、以及在保障网络安全方面的应用。 一、渗透测试的基本概念 渗透测试是一…

java项目之留学生交流互动论坛(ssm)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的留学生交流互动论坛。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 管理员&#xff1a;首页、个…

PyQt UI 信号槽函数重复执行问题

PyQt环境下&#xff0c;信号connect槽函数的方法有两种&#xff1a; &#xff08;1&#xff09;使用connect&#xff08;&#xff09; 示例代码&#xff1a;对话框SelectingDlg&#xff0c;上设置了一个pushbutton控件 class SelectingDlg(Ui_SelectingDlg,QDialog):def __i…

最佳利用Mock提升测试效率的7个技巧!

再聊这个问题之前&#xff0c;我们先了解一下公司技术架构的演变过程&#xff0c;这样我们才能真正体会到我们为什么要使用 Mock功能。 单体应用 在早期&#xff0c; 大部分公司的应用技术栈主要可以分为两大类&#xff1a;LAMP&#xff08;Linux Apache MySQL PHP&#x…

CSS基础方法——引入方式、属性、基础选择器

CSS 主要用于设置 HTML 页面中的文本样式&#xff08;字体、大小、颜色、对齐方式……&#xff09;、图片样式&#xff08;宽高、边框样式、边距……&#xff09;以及版面的布局和外观显示样式。 1、CSS引入方式 行内样式 写在标签中&#xff0c;通常不使用&#xff0c;只做…

并发编程(五)

读写锁&#xff1a;适用于读多写少的场景 读写锁是一种用于同步访问共享资源的机制&#xff0c;它允许多个线程同时读取共享资源&#xff0c;但在写入时则需要独占式的访问。 Java中的读写锁可以通过java.util.concurrent.locks包中的ReadWriteLock接口和它的实现类Reentrant…

apply、call、bind的区别 如何实现一个bind

apply、call、bind的区别? 如何实现一个bind 作用 apply、call、bind 的作用是改变函数执行时的上下文&#xff0c;简而言之就是改变函数运行时的 this 指向 那么什么情况下需要改变 this 的指向呢? 下面举个例子 var name "lucy"; var obj {name: "mar…

Arcgis10制图/建模小技巧:梯田地形

小编早年做城市设计的时候&#xff0c;还不知道怎么用gis生成地形&#xff0c;然后导入skechup&#xff1b;只会把cad的等高线导进su后一层层拉伸&#xff08;过程很繁琐&#xff09;&#xff0c;会得到梯田地形。梯田地形虽然不完全贴合实际&#xff0c;但也凑合能用&#xff…

SV-9001 壁挂式网络采播终端

SV-9001 壁挂式网络采播终端 一、描述 SV-9001是深圳锐科达电子有限公司的一款壁挂式网络采播终端&#xff0c;具有10/100M以太网接口&#xff0c;配置一路线路输入和一组麦克风输入&#xff0c;可以直接连接音源输出设备或麦克风&#xff0c;将采集音源编码后发送至网络播放终…

Win2008R2上RedisDesktopManager 黑屏

问题&#xff1a; 运行发现右侧显示缓存信息的部分是黑屏。 解决方式&#xff1a; 管理工具->远程桌面服务->远程桌面会话主机配置->RDP-TCP->属性->客户端设置->颜色深度->限制最大颜色深度,将16位改为32位

通过IP地址识别风险用户

随着互联网的迅猛发展&#xff0c;网络安全成为企业和个人关注的焦点之一。识别和防范潜在的风险用户是维护网络安全的关键环节之一。IP数据云将探讨通过IP地址识别风险用户的方法和意义。 IP地址的基本概念&#xff1a;IP地址是互联网上设备的独特标识符&#xff0c;它分为IP…

Word·VBA实现邮件合并

目录 制作邮件合并模板VBA实现邮件合并举例 之前写过的一篇使用《python实现word邮件合并》&#xff0c;本文为vba实现方法 制作邮件合并模板 域名可以使用中文&#xff0c;最终完成的word模板&#xff0c;wps操作步骤类似 VBA实现邮件合并 在Excel启用宏的工作表运行以下代…

【时光记:2023的心灵旅程】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

关于react-native-reanimated 3.6.1在react native debugger报错问题

ExceptionsManager.js:158 Error: [Reanimated] UpdatePropsManager is not available on non-native platform. 在node_module下找到找到相关文件&#xff0c;注释掉相关代码 然后打补丁放在自己的项目下&#xff0c;关于打补丁在博客主页&#xff0c;自行查看讲解

如何在知识付费平台中精准定位,选择最适合自己的?

明理信息科技知识付费saas租户平台 在当今的知识付费时代&#xff0c;我们面临着一个重要的问题&#xff1a;如何从众多的知识付费平台中选择适合自己的平台&#xff1f;本文将为您提供一些实用的建议&#xff0c;帮助您做出正确的选择。 首先&#xff0c;我们需要了解自己的…

精确掌控并发:分布式环境下并发流量控制的设计与实现(二)

3. 固定窗口 参考&#xff1a;精确掌控并发&#xff1a;分布式环境下并发流量控制的设计与实现&#xff08;一&#xff09;-CSDN博客 4. 滑动窗口 滑动窗口算法是一种更为灵活的流量控制方案&#xff0c;它比固定窗口算法能更平滑地处理突发流量。在滑动窗口中&#xff0c;时…

简约的网易云音乐播放器SPlayer

今天给大家介绍另一款音乐播放器 SPlayer &#xff0c;如果你对第三方网易云音乐播放器感兴趣&#xff0c;可以去看看老苏之前写的其他项目 文章传送门&#xff1a; 高颜值的第三方网易云播放器YesPlayMusic&#xff08;续&#xff09;跨平台的第三方网易云播放器Radishes 什么…

自定义shiro标签实现hasAnyPermission

前言 如何自定义hasAnyPermission 标签 实现hasAnyPermission 实现 public class HasAnyPermssionTag extends PermissionTag {public HasAnyPermssionTag() {}protected boolean showTagBody(String p) {String[] arr p.replaceAll("\r\n", "").repl…