shell脚本之正则表达式与文本编辑器(一)
目录
前言
一、正则表达式
1、正则表达式简介
2、基础正则表达式
3、扩展正则表达式
二、grep和egrep工具
1、grep基本用法
2、查找任意一个字符“.”与重复字符“*”
3、查找连续字符范围“{}”
总结:
前言
正则表达式是组成“操作”的基本语法,而这些“操作”是运用于sed和awk必备的能力。sed是文
本处理工具,可以读取文件内容,根据指定条件对数据进行添加、删除、替换等操作;awk是编辑
工具,用于在Linux/unix下对文本和数据进行处理。
一、正则表达式
1、正则表达式简介
正则表达式,又称规则表达式。计算机科学的一个概念。正则表达式通常被用来检索、替换那
些符合某个模式(规则)的文本。正则表达式不是一个工具程序,而是一个字符串处理的标准依据,
是使用单个字符串搜索、匹配一系列符合某个语法规则的字符串。它由普通字符(a~z)以及特殊
字符(又叫“元字符”)组成。
正则表达式又分为基础正则表达式(BRE)和扩展正则表达式(ERE)。
如果要以正则表达式的方式处理字符串,就得使用支持正则表示的工具,比如grep sed awk
egrep等。
Linux文本处理工具 |
||
文本处理工具 |
基础正则表达式 |
扩展正则表达式 |
vi编辑器 |
支持 |
支持 |
grep |
支持 |
支持 |
egrep |
支持 |
支持 |
sed |
支持 |
支持 |
awk |
支持 |
支持 |
2、基础正则表达式
基础正则表达式元字符 |
||
元字符 |
作用 |
|
\ |
转义符,将特殊字符进行转义, 忽略其特殊意义 |
|
^ |
匹配行首,^则是匹配字符串的开始位置 |
定位符 |
$ |
匹配行尾,$则是匹配字符串的结束位置 |
|
. |
匹配除换行符\n之外的任意单个字符, |
|
* |
匹配前面子表达式0次或者多次 |
|
[list] |
匹配list列表中的一个字符 |
|
[^list] |
匹配任意不在list列表中的一个字符 |
|
\{n\} |
匹配前面的子表达式n次 |
|
\{n,\} |
匹配前面的子表达式不少于n次 |
|
\{n,m\} |
匹配前面的子表达式n到m次 |
|
\n |
匹配一个换行符 |
非打印字符 |
\r |
匹配一个回车符 |
|
\t |
匹配一个制表符 |
注:“.”点匹配除换行符\n之外的任意单个字符,awk则中可以ab.匹配abc或bad,不可匹配abcd或abde,只能匹配单字符....
3、扩展正则表达式
扩展正则表达式元字符 |
|
元字符 |
作用 |
+ |
匹配前面的子表达式1次以上,如go+d,将匹配至少一个o |
? |
匹配前面的子表达式0次或1次,如go?d,将匹配gd或god |
() |
将()号中的字符串作为一个整体 |
| |
以或的方式匹配字符串,如good|great。将匹配good或者great |
二、grep和egrep工具
grep 命令常用选项及含义:
◆-a :将 binary 文件以 text 文件的方式搜寻数据
◆-c :计算找到 '搜寻字符串' 的次数
◆-i :忽略大小写的不同,所以大小写视为相同
◆-n :顺便输出行号
◆-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
◆--color=auto :可以将找到的关键词部分加上颜色的显示
1、grep基本用法
[root@kang mytext]# grep -n 'the' xx.txt #查找特定字符 有the的行
4:the tongue is boneless but it breaks bones.12!
5:google is the best tools for search keyword.
……
[root@kang mytext]# grep -vn 'the' xx.txt #查找没有the字符的行
1:he was short and fat.
2:He was wearing a blue polo shirt with black pants.
……
[root@kang mytext]# grep -n 'sh[io]rt' xx.txt #利用中括号“[]”来查找集合字符
1:he was short and fat.
2:He was wearing a blue polo shirt with black pants.
#“[]”中无论有几个字符, 都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”。
[root@kang mytext]# grep -n 'oo' xx.txt #查找包含重复单个字符“oo”
5:google is the best tools for search keyword.
8:a wood cross!
12:#woood #
……
[root@kang mytext]# grep -n '[^w]oo' xx.txt #查找“oo”前面不是“w”的字符串
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.
12:#woood #
……#“#woood #”中有 “ooo”,而“oo”前面的“o”是符合匹配规则的。
[root@kang mytext]# grep -n '[^a-z]oo' xx.txt #查找“oo”前面不是小写字母的字符串
3:The home of Football on BBC Sport online.
[root@kang mytext]# grep -n '[0-9]' xx.txt #查找包含数字的行
4:the tongue is boneless but it breaks bones.12!
7:PI=3.141592653589793238462643383249901429
[root@kang mytext]# grep -n '^[a-z]' xx.txt #查找以小写字母开头的行
1:he was short and fat.
4:the tongue is boneless but it breaks bones.12!
…… #查找行首“^”与行尾字符“$”
[root@kang mytext]# grep -n '^[A-Z]' xx.txt #查找以大写字母开头的行
2:He was wearing a blue polo shirt with black pants.
3:The home of Football on BBC Sport online.
……
[root@kang mytext]# grep -n '^$' xx.txt #查询空白行
10:
11:
[root@kang mytext]#
“^”符号在元字符集合“[]”符号内外的作用是不一样的,在“[]”符号内表示反向选择,在“[]” 符号
外则代表定位行首。反之,若想查找以某一特定字符结尾的行则可以使用“$”定位符。
2、查找任意一个字符“.”与重复字符“*”
在正则表达式中小数点(.)也是一个元字符,代表任意一个字符。“*”代表的是重复零个或多
个前面的单字符,“o*”表示拥有零个(即为空字符)或大于等于一个“o”的字符,允许空字符。
[root@kang mytext]# grep -n '\.$' xx.txt #查询以小数点(.)结尾的行
1:he was short and fat.
3:The home of Football on BBC Sport online.
……
[root@kang mytext]# grep -n 'w..d' xx.txt
5:google is the best tools for search keyword.
8:a wood cross!
……
[root@kang mytext]# grep -n 'o*' xx.txt
1:he was short and fat.
2:He was wearing a blue polo shirt with black pants.
3:The home of Football on BBC Sport online.
……
[root@kang mytext]# grep -n 'woo*d' xx.txt#查询以 w 开头 d 结尾,中间包含至少一个 o 的字符串
8:a wood cross!
12:#woood #
13:#woooooood
17:192.168.90.55 wood the
[root@kang mytext]# grep -n 'w.*d' xx.txt
#查询以 w 开头 d 结尾,中间的字符可有可无的字符串。
1:he was short and fat.
5:google is the best tools for search keyword.
8:a wood cross!
[root@kang mytext]# grep -n '[0-9][0-9]*' xx.txt #查询任意数字所在行。
4:the tongue is boneless but it breaks bones.12!
7:PI=3.141592653589793238462643383249901429
[root@kang mytext]#
3、查找连续字符范围“{}”
使用了“.”与“*”来设定零个到无限多个重复的字符,如果想要限制一个范围内的重复的字符串该
如何实现呢?例如,查找三到五个 o 的连续字符,这个时候就需要使用基础正则表达式中的限定范
围的字符“{}”。因为“{}”在 Shell 中具有特殊意义,所以在使用“{}”字符时,需要利用转义字符“\”,将
“{}”字符转换成普通字符。“{}”字符的使用方法如下所示。
[root@kang mytext]# grep -n 'o\{2\}' xx.txt #查询含两个 o 的字符。
3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.
8:a wood cross!
12:#woood #
……
[root@kang mytext]# grep -n 'wo\{2\}d' xx.txt
#查询以 w 开头以 d 结尾,中间包含 2 个o 的字符串。
8:a wood cross!
17:192.168.90.55 wood the
[root@kang mytext]# grep -n 'wo\{2,\}d' xx.txt
#查询以 w 开头以 d 结尾,中间包含 2 个或 2 个以上 o 的字符串。
8:a wood cross!
12:#woood #
13:#woooooood
17:192.168.90.55 wood the
[root@kang mytext]# grep -n 'wo\{2,5\}d' xx.txt
##查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串。
8:a wood cross!
12:#woood #
17:192.168.90.55 wood the
[root@kang mytext]#
总结:
未完待续
shell脚本之正则表达式与文本编辑器(一)相关推荐
- Shell脚本之正则表达式以及文本编辑器
目录 一.正则表达式 1.定义 2.元字符 元字符使用(这里举例为常用的元字符) 3.表示次数 (1)匹配字符 (2)查看子网掩码信息 4. 位置锚定 5.扩展正则表达式 (1)表示次数 (2)表示分 ...
- Shell编程之正则表达式与文本编辑器
一.正则表达式 1.正则表达式概述 通常用于判断语句中,用来检查某一字符串是否满足某一格式 正则表达式是由普通字符与元字符组成 普通字符包括大小写字母.数字.标点符号及一些其他符号 元字符是指在正则表 ...
- 七:Shell脚本:正则表达式与文本处理器三剑客grep,egrep, sed,awk
正则表达式定义 正则表达式,又称正规表达式.常规表达式 使用字符串来描述.匹配一系列符合某个规则的字符串 ●正则表达式组成 ◆普通字符 大小写字母.数字.标点符号及一些其他符号 ◆元字符 在正则表达式 ...
- shell脚本通过正则表达式提取 IP 地址
假设需要提取的 IP 地址在文件 test.txt 中,可以使用以下 shell 脚本通过正则表达式提取 IP 地址并打印 grep -E -o "([0-9]{1,3}.){3}[0-9] ...
- 详解Shell脚本:正则表达式
正则表达式的概念 正则表达式:使用单个字符串来描述.匹配一系列符合某个句法规则的字符串 由普通字符与特殊字符组成,一般用在脚本编程.文本编辑器中,如php.python.she等,简写为regex.r ...
- shell脚本学习笔记 (流编辑器sed)
sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出.sed不 ...
- 独一无二 Shell 编程之正则表达式 与文本处理器 详细解释
技能展示: 基础正则表达式 扩展正则表达式 sed 工具使用方法 awk 工具使用方法 4.1 正则表达式 之前学习了 Shell 脚本的基础用法,已经可以利用条件判断.循环等语句编辑 Shell 脚 ...
- 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. ...
- shell脚本应用——正则表达式
目录 正则表达式 基础正则表达式 基础正则表达式示例 查找特定字符 中括号"[]"来查找集合字符 查找行首"^"与行尾字符"$" 查找任意一 ...
最新文章
- 【python】 web开发入门
- 博士生创新能力的培养点滴
- linux中的bash shell的特性
- WPF 使用NotifyIcon控件
- XenApp Command Line参数的传递
- LINQ to SQL之Step by Step及新手问题小结
- Ubuntu 系统安装APACHE PHP MYSQL
- Android变量longpress,Android:在自定义WebView中从onLongPress打开ContextMenu
- 了解 node.js
- Python-Matplotlib可视化(4)——添加注释让统计图通俗易懂
- 【197期】华为OD两轮技术面试记录,给后来人一个参考!
- python plot_surface 画表面网格图
- 解决winrar压缩文件或文件夹时,文件拒绝访问问题
- 瑞科生物通过聆讯:9个月亏损超5亿 君联与红杉是股东
- HCL Domino/Notes专业课程和认证体系介绍
- 【tools】信息收集-灯塔资产扫描 ARL
- mapstruct实体类拷贝替代beanutils
- 太阳直射点纬度计算公式_高中地理——每日讲1题(太阳直射点、太阳高度角、极昼、极夜)...
- 【Mysql学习之旅-2】经典sql面试题及答案分析
- 高考后的计算机培训,高考结束后,家长该马上给孩子“配电脑”吗?大学老师这样说...
热门文章
- 谁喝水谁养斑马答案C语言,一群斑马一起在河边喝水,意外打造出条码效果,让人有眩晕的视觉...
- 海波龙 11.1.2.4安装指南// hyperion install
- 微信支付appid参数不正确
- 如何高效学习ARMv8/ARMv9架构知识
- 墨绿极简复古风总结汇报PPT模板
- Win系统 - 这样清理C盘,一下子多出几十个G
- Ubuntu安装jdk-7u80-linux-i586
- 单阶段实例分割又一佳作!出自沈春华团队
- 计算机内存寿命,终于明白为什么SSD有寿命限制而内存没有?
- Shopee卖家该如何选择类目?