首页 > 系统相关 >Shell阶段09 shell正则,grep正则, sed使用及案例

Shell阶段09 shell正则,grep正则, sed使用及案例

时间:2024-06-01 21:32:50浏览次数:16  
标签:shell grep passwd shell01 正则 sed root shell13

Shell正则

[root@shell01 shell13]# grep -E 'root|nginx|mysql|www' passwd通配符及特殊符号

*        #所有
.        #当前目录
..        #当前目录的上级目录
-        #当前目录的上一次所在的目录
~        #家目录
#        #注释,超级管理员的命令行提示符
$        #引用变量,普通用户的命令行提示符
?        #匹配任意一个字符,必须是一个
!        #非,取反
[]        #匹配中括号中任意一个字符
{}        #生成序列,整体
[^]        #排除中括号中所有字符
``        #优先执行反引号里面的命令
$()        #优先执行里面的命令
&&        #前面一个命令执行成功,才会执行后面的命令
||        #签名的命令执行失败,才会执行后面的命令
|        #管道,将前面的命令的输出结果交给管道后面的命令
\        #转义字符,取消一些特殊字符的含义
&        #将程序放到后台运行

正则表达式

注意事项:
正则神坑    中文字符

正则符号    基础正则    扩展正则
RE            BRE            ERE

^        #开头
$        #结尾
^$        #空行(有空格或tab键不算空行)
\        #转义字符
.        #任意一个字符,除了换行符
[]        #匹配中括号中的任意一个字符
[^]        #匹配[^]之外的所有字符
[a-z]    #匹配所有小写字母
[0-9]
?        #匹配前面的字符出现0次或者1次        #扩展
*        #匹配前面的字符出现0次或者0次以上
+        #匹配前面的字符出现1次或者1次以上        #扩展
.*        #所有
()        #整体,后向引用,创建一个用于匹配的字符串    #扩展
{n}        #n数字,前面的字符出现n次                #扩展
{n,}    #前面的字符至少出现n次                #扩展
{n,m}    #前面的字符出现至少n次,最多m次    n<m        #扩展
{,m}    #前面的字符最多出现m次                #扩展
|        #或者                                #扩展

特定的字符
[[:upper:]]        所有大写字母
[[:lower:]]        所有小写字母
[[:alpha:]]        所有字母
[[:space:]]        所有空白字符
[[:digit:]]        所有数字
[[:alnum:]]        所有字母和数字
[[:punct:]]        所有特殊符号

grep    #三剑客老三    过滤    过滤出来的内容是有颜色

[root@shell01 shell13]# alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'

选项:
    -i        #忽略大小写
    -v        #排除
    -n        #显示过滤出来的内容所在文件的行号
    -c        #将过滤出来的内容进行统计
    -w        #精确匹配
    -o        #只显示过滤出来的内容
    -E        #支持扩展正则
    -r        #递归过滤
    -R        #递归过滤
    -A        #显示过滤出来的内容及向下多少行
    -B        #向上
    -C        #向上向下各多少行

#准备文件
cp /etc/passwd ./

#过滤以什么开头的行
[root@shell01 shell13]# grep '^root' passwd
root:x:0:0:root:/root:/bin/bash

#过滤以什么为结尾的行
[root@shell01 shell13]# grep 't$' passwd 
halt:x:7:0:halt:/sbin:/sbin/halt

#过滤出空行,并打印行号    -n显示行号
[root@shell01 shell13]# grep -n '^$' passwd

#匹配任意一个字符,不匹配空行
[root@shell01 shell13]# grep '.' passwd

#匹配所有行,包括空行
[root@shell01 shell13]# grep '.*' passwd

# 取消特殊含义,匹配以.结尾行
[root@shell01 shell13]# grep '\.$' passwd

#匹配中括号中的任意一个字符,a开头或者c开头
[root@shell01 shell13]# grep '^[ac]' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
cdm:x:3:4:adm:/var/adm:/sbin/nologin

#以ac开头,加不加括号都行
[root@shell01 shell13]# grep '^(ac)' passwd

#排除中括号中的任意一个字符,排除a或者c开头
[root@shell01 shell13]# grep '^[^ac]' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#统计出文件中所有字母出现的次数,次数从大到小进行排列
# -o只显示过滤出来的内容   uniq -c去重统计
[root@shell01 shell13]# grep -o '[a-Z]' passwd |sort |uniq -c|sort -rn
    101 n
     84 o
     73 s

#统计出文件中所有单词出现的次数,次数从大到小进行排列
#+号是扩展正则,需要用-E
[root@shell01 shell13]# grep -Eo '[a-Z]+' passwd |sort |uniq -c|sort -rn
     26 sbin
     24 x
     20 nologin
     10 var

#+和*的区别之处
[root@shell01 shell13]# grep 'a*' passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@shell01 shell13]# grep -E 'a+' passwd 
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

#*和?的区别
[root@shell01 shell13]# grep -Eo 'a*' passwd 
a
aaa
[root@shell01 shell13]# grep -Eo 'a?' passwd 
a
a

#过滤出passwd文件中数字为2位或者3位的数字
#这里用w精确匹配, {}是扩展正则,要用-E
[root@shell01 shell13]# grep -Ew '[0-9]{2,3}' passwd 
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
#匹配数字位数出现2次
[root@shell01 shell13]# grep -Ew '[0-9]{2}' passwd 
#匹配数字出现5次以上
[root@shell01 shell13]# grep -Ew '[0-9]{5,}' passwd 
#前面的数字最多匹配2次,可以匹配0次
[root@shell01 shell13]# grep -Ew '[0-9]{,2}' passwd
[root@shell01 shell13]# grep -Ew '[0-9]{0,2}' passwd 

#过滤文件中以r开头的行,忽略大小写
[root@shell01 shell13]# grep -i '^r' passwd
root:x:0:0:root:/root:/bin/bash
[root@shell01 shell13]# grep '^[rR]' passwd
#()号是一个整体,当中用|才是或
[root@shell01 shell13]# grep -E '^(r|R)' passwd

#过滤出文件中包含root nginx mysql www等字符串
[root@shell01 shell13]# grep -E 'root|nginx|mysql|www' passwd

#过滤出文件中以root nginx mysql www开头的行
[root@shell01 shell13]# grep -E '^root|^nginx|^mysql|^www' passwd
[root@shell01 shell13]# grep -E '^(root|nginx|mysql|www)' passwd

#取IP地址
[root@shell01 shell13]# ifconfig |grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' -o

#文件中匹配出正确的身份证号码
[root@shell01 shell13]# grep -Ew '[0-9]{17}[0-9x]{1}' id.txt

Shell正则之Sed

三剑客的老二    擅长替换

流编辑器    非交互式的编辑器

Sed的工作原理
sed命令按照行进行处理内容。处理文件时,首先会将第一行取出放在一个缓冲区,这个缓冲区我们称之为模式空间。

sed进行处理。如果行匹配处理完成之后将之输出到屏幕,如果行不匹配,将之丢弃。接着处理下一行。同样的操作,直到文件结束。文件的内容其实并没有改变。如果想真正的改变,需要加上-i选项。

sed是可以同时处理多个文件的。

sed的语法:
sed        [选项]    command        files

sed正则使用,和grep相差不大

sed使用扩展正则时,需要使用-r选项

Sed的命令示例:
选项:        增删改查
    -n        #取消默认输出
    -i        #修改文件内容
    -r        #支持扩展正则
    -e        #多项编辑
    
Sed 的内部命令
    a        #追加
    i        #插入(在上面追加)
    p        #打印
    d        #删除
    s        #替换
    g        #全局
    c        #在当前行位置进行替换
    !        #取反
    =        #显示行号
    i        #忽略大小写
    
    了解
    n        #读入下一行,从下一行命令进行处理(N为上一行)
    h        #把模式空间的内容重定向到暂存缓冲区
    H        #把模式空间里的内容追加到暂存缓冲区
    g        #取出暂存缓冲区的内容,将其复制到模式空间,覆盖原处的内容
    G        #取出暂存缓冲区的内容,将其复制到模式空间,追加到原处的内容的后面


#输出第三行 (默认会输出所有内容,-n取消默认输出)
[root@shell01 shell13]# sed -n '3p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#输出2-10行
[root@shell01 shell13]# sed -n '2,10p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#删除2-10行
[root@shell01 shell13]# sed -n '2,10d' /etc/passwd
#删除第2行到结尾
[root@shell01 shell13]# sed -n '2,$d' /etc/passwd

#在第三行下面追加oldboy内容
[root@shell01 shell13]# sed -i '3a oldboy' passwd
#在第三行上面追加alex
[root@shell01 shell13]# sed -i '3i alex' passwd

#把第五行替换为lidao
[root@shell01 shell13]# sed '5c lidao' passwd

#找lp打印出来
[root@shell01 shell13]# sed -n '/lp/p' passwd

#在lp行下把spool换成alex    (-n取消默认输出,就要有p,否则没有输出了)
[root@shell01 shell13]# sed -n '/lp/s#spool#alex#gp' passwd
lp:x:4:7:lp:/var/alex/lpd:/sbin/nologin

#匹配root行,删除root行的下一行(没用) (换成N就是上一行)
[root@shell01 shell13]# sed '/root/{n;d}' passwd
#替换匹配root行的下一行(没用)
[root@shell01 shell13]# sed '/root/{n; s/bin/oldboy/}' passwd

#将第一行写入暂存区,替换最后一行内容
[root@shell01 shell13]# sed '1h;$g' /etc/hosts
#将第一行写入暂存区,在最后一行调用暂存区的内容
[root@shell01 shell13]# sed '1h;$G' /etc/hosts
#将第一行的内容删除但保留至暂存区,在最后一行调用暂存区内容追加到尾部
[root@shell01 shell13]# sed -r '1{h;d};$G' /etc/hosts
#将第一行的内容写入暂存区,从第二行开始往下全部替换
[root@shell01 shell13]# sed -r '1h;2,$g' /etc/hosts
#将第一行重定向到暂存区,2-3行追加到暂存区,最后追加调用暂存区的内容
[root@shell01 shell13]# sed -r '1h; 2,3H; $g' /etc/hosts

#示例:
#把定时任务里的时间同步注释
[root@shell01 shell13]# sed -n '/ntpdate/s#^##gp' /var/spool/cron/root
[root@shell01 shell13]# sed -n '/ntpdate/s/^/#/gp' /var/spool/cron/root
#把第二行注释
[root@shell01 shell13]# sed -n '2s/^/#/gp' /var/spool/cron/root
#把第二行到结尾注释
[root@shell01 shell13]# sed -n '2,$s/^/#/gp' /var/spool/cron/root
#将第2行到第6行前面添加#注释符  &为追加的意思
[root@shell01 shell13]# sed -r '2,6s/.*/#&/' passwd

 

标签:shell,grep,passwd,shell01,正则,sed,root,shell13
From: https://www.cnblogs.com/ludingchao/p/18226444

相关文章

  • Linux-shell自动化编程
    1.常用命令解释器Shell命令解释器:bash编程. 编程环境准备 2.shell脚本执行方式 3.变量变量名字命名要求:1.不能以数字开头。2.不能以特殊符号开头,可以以"_"开头。3.推荐字母开头变量的命名方式:1.驼峰方式:personOfNamepersonOfAge2.✔现代式:单词(小......
  • PowerShell 来操作 Windows 防火墙,实现网络访问控制和防火墙规则的设置。下面是一些常
    PowerShell来操作Windows防火墙,实现网络访问控制和防火墙规则的设置。下面是一些常见的PowerShell命令,用于创建阻止特定类型文件传输协议的规则和限制电子邮件附件的规则:阻止FTP传输协议:powershellCopyCodeNew-NetFirewallRule-DisplayName"BlockFTP"-DirectionOu......
  • Xshell安装(免费可用)和使用教程
    Xshell使用方式Xshell是一款功能强大的终端模拟器,用于远程访问和管理服务器。它支持多种协议,如SSH1/SSH2、Telnet、Rlogin、Serial等。本文将介绍Xshell的基本使用方法。1.安装与启动首先,从官网下载Xshell安装包,然后按照提示进行安装。安装完成后,启动Xshell。2.创建......
  • shell编程扫盲
    大部分内容参考自清华大学出版社<<Linux编程>>,相关内容会随着笔者的不断学习而增量更新chatgpt能够完成shell编程的大部分内容,可以在阅读本文后向chatgpt提出需求,适当修改chatgpt给出的代码,再于测试环境进行排错,最后用于生产环境2.1Shell编程的基本概念shell是一种围绕......
  • PowerShell实现定时备份并清理文件夹数据
    脚本backup.ps1#设置执行策略以允许脚本运行Set-ExecutionPolicyBypass-ScopeProcess-ForceWrite-Host"正在备份文件,请勿关闭...."#设置源目录和目标备份目录#备份源文件路径$SOURCE_DIR="D:\data\app\images"#备份目标路径$BACKUP_DIR="D:\data\backup"$......
  • 正则对cpu的消耗
    背景:正则对于cpu的消耗,其中的资源占比较高。如果数据量庞大且正则复杂的时候,那么idle会消耗殆尽。-----以下为正文正则表达式(regex)是一种强大且灵活的模式匹配工具,广泛用于文本处理。然而,正则表达式的处理可以对CPU造成显著的消耗,尤其在处理复杂的模式或大型输入时。以......
  • Xshell安装(免费可用)和使用教程
    Xshell使用方式Xshell是一款功能强大的终端模拟器,用于远程访问和管理服务器。它支持多种协议,如SSH1/SSH2、Telnet、Rlogin、Serial等。本文将介绍Xshell的基本使用方法。1.安装与启动首先,从官网下载Xshell安装包,然后按照提示进行安装。安装完成后,启动Xshell。2.创建......
  • Shell阶段08 数组(普通数组, 关联数组), 示例(数组的遍历与循环)
    数组基本概述#shell的数组用的比较少,一般都用awk。因为shell的数组比awk慢很多什么是数组简单来说:数组其实就是变量的一种,变量只能存储一个值,而数组可以存储多个值数组的分类分为两类普通数组关联数组普通数组:只能使用正整数作为数组索引关联数组:可以使用......
  • shell编程01——第一个shell脚本
    Shell和shell脚本Shell和shell脚本是两个概念,Shell是用C语言编写程序,shell脚本是一种为shell编写的脚本程序第一个shell脚本1.新建一个文件:touchtest.sh2.使脚本可执行:chmod+xtest.sh3.编辑test.sh,内容为:#!/bin/bashecho"helloworld"4.执行脚本./test.sh,......
  • 在 Windows Server 2022 中,您可以使用 PowerShell 来管理 DNS 服务器,以下是一些常用的
    在WindowsServer2022中,您可以使用PowerShell来管理DNS服务器,以下是一些常用的PowerShell命令及其示例:安装DNS服务器角色:安装DNS服务器角色:powershellCopyCodeInstall-WindowsFeature-NameDNS-IncludeManagementTools配置DNS区域和记录:创建新的......