正则表达式定义
正则表达式,又称正规表达式、常规表达式
使用字符串来描述、匹配一系列符合某个规则的字符串
●正则表达式组成
◆普通字符
大小写字母、数字、标点符号及一些其他符号
◆元字符
在正则表达式中具有特殊意义的专用字符

基础正则表达式元字符
(1)、基础正则表达式是常用的正则表达式部分
(2)、除了普通字符外,常见到以下元字符
●: \ 转义字符,\ !、\n等
●: ^ 匹配字符串开始的位置
示例:^a、 ^the、 ^#
●: $ 匹配字符串结束的位置
示例:word$
●: . 匹配除\n之外的任意一个字符
示例:go.d 、g…d
●: * 匹配前面子表达式0次或者多次
示例:goo*d、go.*d
●: [list] 匹配list列表中的一个字符
示例:go[ola]d, [abc]、[a-z]、[a-z0-9]
●: [^list] 匹配任意不在list列表中的一个字符
示例:[a-z]、[^0-9]、 [^A-Z0-9]
●: \ {n,m\ }: 匹配前面的子表达式n到m次,有\ {n\ }、\ {n,\ } 、 \ {n,m\ }三种格式(转义字符与字母之间无空格)
示例:go\ {2\ }d、go\ {2,3\ }d、go\ {2,\ }d

中括号用法示例
[root@localhost ~]# echo ab | grep [abc]
ab
[root@localhost ~]# echo ab | grep [abc]
ab
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# echo abc | grep [abc]
abc
[root@localhost ~]# echo abcd | grep [abc]
abcd
[root@localhost ~]# echo ABC | grep [A-Z]
ABC
[root@localhost ~]# echo ABC | grep [a-z]   大小写分开匹配[root@localhost ~]# echo ABC | grep [a-z0-9]
[root@localhost ~]# echo ABC0 | grep [a-z0-9]
ABC0
示例用法 [^list]  匹配任意不在list列表中的一个字符
[root@localhost ~]# echo ABC/0 | grep [^a-zA-Z0-9]
ABC/0             /为匹配到的结果

[ ]外面的^代表以什么开头,[ ]里面的是代表:非

示例 \ {n,m\ }: 匹配前面的子表达式n到m次,有\{n\}、\{n,\} 、\{n,m\}三种格式( 分别代表n次,大于n次,大于n次小于m次)
[root@localhost ~]# echo good | grep "go\{1,3\}d"
good
[root@localhost ~]# echo good | grep "go\{1\}d"
[root@localhost ~]# echo god | grep "go\{1\}d"
god
[root@localhost ~]# echo gd | grep "go\{1,\}d"
[root@localhost ~]# echo god | grep "go\{1,\}d"
god
[root@localhost ~]#
[root@localhost ~]# echo goooood | grep "go\{1,\}d"
goooood
[root@localhost ~]# echo good | grep "go\{3,\}d"
[root@localhost ~]# echo good | grep "go\{2,\}d"
good
示例  **\< 匹配以什么什么开头的行**
[root@localhost ~]# echo goood | grep "\<g"        匹配以g开头的
goood
[root@localhost ~]# echo goood | grep "\<goo"      匹配以goo开头的
goood
[root@localhost ~]# echo goood | grep "\<oo"
[root@localhost ~]# echo goood | grep "^goo"       匹配以goo开头的
goood
[root@localhost ~]# echo goood | grep ^[ goo ]
grep: 无效的常规表达式
[root@localhost ~]# echo goood | grep ^[goo]        匹配以g开头的一个字符
goood
示例匹配以某个单词的行   \<......>\
[root@localhost ~]# echo od | grep "\<od\>"    od作为一个整体一个单词不可多不可少
od

扩展正则表达式元字符
扩展正则表达式是对基础正则表达式的扩充深化
扩展元字符:
●+:匹配前面子表达式1次以上
例: go+d,将匹配至少一个o
●?:匹配前面子表达式0次或者1次
例: go?d,将匹配gd或god
●( ):将括号中的字符串作为一个整体
例:(xyz)+,将匹配xyz整体1次以上,如xyzxyz
● |:以或的方式匹配字条串
例1: good|food,将匹配good或者food
例2: g(oo|la)d,将匹配good或者glad

示例扩展元字符  +:匹配前面子表达式1次以上
[root@localhost ~]# echo good | egrep "go+d"
good
[root@localhost ~]# echo good | egrep "g+d"    匹配不到o
[root@localhost ~]# echo gd | egrep "g+d"
gd
[root@localhost ~]# echo gggd | egrep "g+d"
gggd
示例 ?:匹配前面子表达式0次或者1次
[root@localhost ~]# echo gggd | egrep "g?d"   匹配到gd
gggd
[root@localhost ~]# echo abcd | egrep "g?d"   匹配到d
abcd
[root@localhost ~]# echo good | egrep "g?d"   匹配到d
good
[root@localhost ~]# echo goodxx | egrep "g?d"  匹配到d
goodxx
示例( ):将括号中的字符串作为一个整体
[root@localhost ~]# echo xxgoodxx | egrep "(good)"    匹配到good
xxgoodxx
[root@localhost ~]# echo xxgoodxx | egrep "(goodx)"  匹配到goodx
xxgoodxx
[root@localhost ~]# echo xxgoodxx | egrep "(good)+"  匹配到good
xxgoodxx
[root@localhost ~]# echo xxgoodxxgood | egrep "(good)+"  匹配到两个good
xxgoodxxgood
[root@localhost ~]# echo xxgoodxxgood | egrep "(good)*"  匹配到两个good
xxgoodxxgood
[root@localhost ~]# echo xxxxx | egrep "(good)*"
xxxxx
[root@localhost ~]# echo xxgoodxxgoodxxgood | egrep "(good)?"   good作为一个整体三个都可以匹配到
xxgoodxxgoodxxgood
示例  |:以或的方式匹配字条串
[root@localhost ~]# echo goodfoodcool | egrep "good|cool"  匹配到good和cool
goodfoodcool
[root@localhost ~]# echo goodfoodcool | egrep "g(oo|ol)d"  匹配到good
goodfoodcool
[root@localhost ~]# echo godgcdgocdgoad | egrep "g(oc|oa)d"  匹配到gocdgoad
godgcdgocdgoad
示例:{n} 前一个字符重复n次
[root@localhost ~]# echo godgcdgocdgoad | egrep "go{1}d"   匹配到god
godgcdgocdgoad
[root@localhost ~]# echo godgcdgocdgoadg.d | egrep "g\.{1}d" 匹配到g.d
godgcdgocdgoadg.d

示例过滤出ip配置文件中正确的地址

[root@localhost ~]# egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.153.100
NETMASK=255.255.255.0
GATEWAY=192.168.153.2
DNS1=114.114.114.114[root@localhost ~]# egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /etc/sysconfig/network-scripts/ifcfg-ens33 > ipaddr.txt   过滤出信息放到ipaddr.txt
然后进入iPaddr.txt 写入错误信息DNS1=1141.1141.1141.1141[root@localhost ~]# egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" ipaddr.txt
IPADDR=192.168.153.100
NETMASK=255.255.255.0
GATEWAY=192.168.153.2
DNS1=114.114.114.114
DNS1=1141.1141.1141.1141[root@localhost ~]# egrep "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" ipaddr.txt
IPADDR=192.168.153.100
NETMASK=255.255.255.0
GATEWAY=192.168.153.2
DNS1=114.114.114.114
此时过滤不会再出现1141

sed工具概述
(1)文本处理工具,读取文本内容,根据指定的条件进行处理,如删除、替换、添加等
(2)可在无交互的情况下实现相当复杂的文本处理操作
(3)被广泛应用于Shell脚本,以完成自动化处理任务
(4)sed依赖于正则表达式
(5)工作原理:读取——执行——显示

工作原理:
1缓存等待处理
①有处理动个就进行处理再输出
②没有处理动作就直报输出
2输出到屏幕
再往下读取文件内容如此反复直到文件内容读完

sed命令格式
sed -e "编辑指令’ 文件1 文件2 …
sed -n -e ‘编辑指令’ 文件1 文件2 …
sed -i -e ‘编辑指令’ 文件1 文件2 …
常用选项
●-e指定要执行的命令,只有一个编辑命令时可省略
●-n只输出处理后的行,读入时不显示
●-i直接编辑文件,而不输出结果
●-f用指定的脚本文件来处理输入的文本文件

sed '' 文本名   不对它操作时
sed 'p' 文本名   输出文本里面内容两遍
sed -n 'p' 文本名   输出文本里面内容一遍(p相当于打印一遍,-n取消打印的那一遍)
sed -n '1p' 文本名  输出第一行
sed -n '3p' 文本名  输出第三行
sed -n '1-3p' 文本名  输出第一到三行
sed -n '$p' 文本名   输出最后一行
sed -n '1,+4p' 文本名  输出五行
sed -n '1~2p' 文本名    从第一行开始每次加两行输出即第1 3 5 7 行等等
sed -n '2~2p' 文本名    从第二行开始每次加两行输出即第2 4 6 8行等等
sed -n '2~3p' 文本名    从第二行开始每次加三行输出即第2 5 8 11行等等
sed -n '2p;3p' 文本名   输出第二行和第三行
sed -n '/^root/p'  输出以root开头的行
sed -n '/ bash$/p' 输出以bash结尾的行
sed -n '/^root\|bash$/p'  输出以root开头的行bash结尾的行
sed -nr '/^root|bash$/p'  输出以root开头的行bash结尾的行
sed -ne '/^root/p' -e '/nologin$/p' 文件名  以root开头或者以mologin结尾的行
sed -ne '2p' -e '4p'文本名  输出第二行和第四行
sed -n '/ /p' 文件名
sed -n '/\\/p' 文件名  过滤出含有\的行
sed -n 's#/bin/bash#/sbin/nologin#p' 文件名
sed -n 'd' 文件名 删除所有
sed -n '10d'    删除第十行
sed  '10d'    删除第十行,可看见删除过程
sed '$d'     删除最后一行
sed '/root/d'   删除有root的行,区分大小写
sed 's/root/xxx/pi'    第一列中的root替换成xxx
sed 's/root/xxx/gpi'    所有的root替换成xxx
sed '/root/Ip'          查找含有root的行,忽略大小写
sed -n '10s/root/xxx/gpi'+文件名      第十行root替换成xxx
sed -n '1,10s/root/xxx/gpi'+文件名      第一到十行root替换成xxx
sed -n 's^#//p'+文件名          把文件中#开头的注释行#去掉
sed -n '1,2s/^/#/p'+文件名     把文件中没有#的第一二行加上#
sed -n 's/^ /#/p'+文件名       把文件中以空格开头的行加上#
sed -n 's/^bin/#&/p'+文件名    文件中以bin开头的行加上#
sed -n 's/o/O/gp'+文件名       文件中所有的小o替换成大O
sed -n 's/[0-9]/x/gp'+文件名   文件中的数字替换成x
sed  '1a hello world'+文件名   文件中第一行后面插入hello  world
sed  '1i hello world'+文件名   文件中第一行上面插入hello  world
sed 'a hello'+文件名           每一行下面都插入hello
sed '$a hello'+文件名          在最后一行插入hello
sed '/^root/a hello'+文件名    在root开头的行后面插入hello
sed -i 写入原文件中
sed -i.bak '1,3a hello' zz.txt     备份文件bak还是原来的,zz文件插入hello
sed '1r /etc/hosts'+文件名          读取另一个文件hosts中的内容显示在第一行后面
sed 'w /opt/bak'+文件名             把文件名中的内容读取到bak下面
sed '1w /opt/bak'+文件名            把文件名中第一行的内容读取到bak下面(覆盖命令)
sed '/root/cxxxx'+文件名            含有root的行整行内容替换成xxxx
sed -n '$='+文件名                  打印此文件一共多少行

七:Shell脚本:正则表达式与文本处理器三剑客grep,egrep, sed,awk相关推荐

  1. Shell 编程之正则表达式与文本处理器--(grep,egrep 与文本处理器-sed、awk、sort、uniq、tr)

    文章目录 一.正则表达式 1.1 正则表达式概述 1.1.1 正则表达式的定义 1.1.2 正则表达式用途 1.2 基础正则表达式 1.3 基础正则表达式:grep命令 1.3.1 查找特定字符 1. ...

  2. 28.文本处理三剑客grep,sed,awk

    三剑客的功能非常强大,但我们只需要掌握他们分别擅长的领域即可:grep擅长查找功能,sed擅长取行和替换,awk擅长取列. 目录 一.grep 二.sed sed选项 sed内置常用命令字符 sed匹 ...

  3. shell浅谈之七文本处理工具grep、sed、awk

    一.简介 Bash Shell提供了功能强大的文件处理工具:sed(流编辑器stream editor)和awk,都可使用正则表达式进行模式匹配.而grep又有助于理解sed和awk. 二.grep命 ...

  4. 【shell脚本】常用工具的学习grep、sed、awk、cut

    grep 功能: 查找过滤工具,查找或者过滤出符合某个模式的字符串,可以和正则表达式搭配使用. 所以本篇博客适合有正则表达式基础的读者阅读哦~. 用法: grep '正则表达式' 操作的文件名 egr ...

  5. 独一无二 Shell 编程之正则表达式 与文本处理器 详细解释

    技能展示: 基础正则表达式 扩展正则表达式 sed 工具使用方法 awk 工具使用方法 4.1 正则表达式 之前学习了 Shell 脚本的基础用法,已经可以利用条件判断.循环等语句编辑 Shell 脚 ...

  6. shell脚本——正则表达式(包含grep详细介绍及应用)

    正则表达式 正则表达式的作用 前言案例:使用^和$判断用户输入的是否是数字 基础正则表达式元字符 基础正则表达式元字符案例 扩展正则表达式元字符 扩展正则表达式元字符案例 正则表达式元字符综合案例 三 ...

  7. SHELL脚本编程之文本处理

    SHELL脚本编程之文本处理 文件处理三剑客之grep grep命令 语法格式 grep参数 grep和egrep 文件处理三剑客之sed sed工作模式 sed选项 sed中的pattern详解 s ...

  8. shell的建立与执行实验报告_实验七 Shell脚本运行的优化

    实验七 Shell脚本运行的优化 一.添加窗口 在Shell脚本的运行过程中,也可以实现类似于Windows系统和Linux系统中的窗口效果,使脚本运行美观. 1.dialog软件的安装 - dial ...

  9. Shell 脚本正则表达式(一)

    Shell 脚本正则表达式(一) 一.正则表达式概述 1.正则表达式定义 2.正则表达式用途 二.基础正则表达式 1.基础正则表达式常见元字符 2.基础正则表达式示例 三.扩展正则表达式 1.扩展正则 ...

最新文章

  1. 【js】绑定事件的两种方法
  2. linux不能获取地址吗,Linux命令源代码获取地址,机不可失,失不再来!
  3. python3 RSA加解密
  4. 怎么自学python语言-python应用:零基础Python应该怎样学习呢?
  5. idea javafx添加maven_IDEA通过Maven打包JavaFX工程(OpenJFX11)
  6. [Jarvis OJ - PWN]——Typo(内涵peak小知识)
  7. Taro+react开发(92):taro中的事件处理
  8. URL Loading System 概览
  9. 软件portable
  10. 开源老兵教你如何评估一项技术是否值得长期投入?
  11. BZOJ 1106: [POI2007]立方体大作战tet 树状数组 + 贪心
  12. LitePal使用详解
  13. LibFetion v0.2.0版发布
  14. android ev3 蓝牙连接,分享一下自己研究EV3蓝牙通信原理的成果 (完结)
  15. kodi树莓派_树莓派投屏秒变家庭影院(安装 kodi
  16. 计算机网络:第四章 网络层
  17. [CVPR2022] A Dual Weighting Label Assignment Scheme for Object Detection
  18. 使用UNIAPP开发APP教程-01框架搭建
  19. RabbitMq:java.lang.NoClassDefFoundError: org/springframework/util/backoff/BackOff
  20. ES9,ES10,ES11知识点

热门文章

  1. 通信教程 | 概述并行与串行通信的区别
  2. 你不可能成为一个死理性派
  3. icc校色文件使用教程_Windows7色彩管理显示器ICC设置方法
  4. 计算机夏令营英语自我介绍,保研夏令营英文自我介绍3篇
  5. 再谈多态——向上映射及VMT/DMT
  6. MCAL中PORT配置
  7. mac linux 性能测试工具,Mac/Linux压力测试神器Siege详解(附安装过程)
  8. matlab armax和arima区别,ARMA和ARIMA的区别是什么?
  9. 【仿真建模】第三课:AnyLogic入门基础课程 - 多层建筑行人疏散仿真讲解
  10. ABB机器人线速度_ABB机器人设置程序开机自启动