目录

前言

一、正则表达式

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脚本之正则表达式与文本编辑器(一)相关推荐

  1. Shell脚本之正则表达式以及文本编辑器

    目录 一.正则表达式 1.定义 2.元字符 元字符使用(这里举例为常用的元字符) 3.表示次数 (1)匹配字符 (2)查看子网掩码信息 4. 位置锚定 5.扩展正则表达式 (1)表示次数 (2)表示分 ...

  2. Shell编程之正则表达式与文本编辑器

    一.正则表达式 1.正则表达式概述 通常用于判断语句中,用来检查某一字符串是否满足某一格式 正则表达式是由普通字符与元字符组成 普通字符包括大小写字母.数字.标点符号及一些其他符号 元字符是指在正则表 ...

  3. 七:Shell脚本:正则表达式与文本处理器三剑客grep,egrep, sed,awk

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

  4. shell脚本通过正则表达式提取 IP 地址

    假设需要提取的 IP 地址在文件 test.txt 中,可以使用以下 shell 脚本通过正则表达式提取 IP 地址并打印 grep -E -o "([0-9]{1,3}.){3}[0-9] ...

  5. 详解Shell脚本:正则表达式

    正则表达式的概念 正则表达式:使用单个字符串来描述.匹配一系列符合某个句法规则的字符串 由普通字符与特殊字符组成,一般用在脚本编程.文本编辑器中,如php.python.she等,简写为regex.r ...

  6. shell脚本学习笔记 (流编辑器sed)

    sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出.sed不 ...

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

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

  8. 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. ...

  9. shell脚本应用——正则表达式

    目录 正则表达式 基础正则表达式 基础正则表达式示例 查找特定字符 中括号"[]"来查找集合字符 查找行首"^"与行尾字符"$" 查找任意一 ...

最新文章

  1. 【python】 web开发入门
  2. 博士生创新能力的培养点滴
  3. linux中的bash shell的特性
  4. WPF 使用NotifyIcon控件
  5. XenApp Command Line参数的传递
  6. LINQ to SQL之Step by Step及新手问题小结
  7. Ubuntu 系统安装APACHE PHP MYSQL
  8. Android变量longpress,Android:在自定义WebView中从onLongPress打开ContextMenu
  9. 了解 node.js
  10. Python-Matplotlib可视化(4)——添加注释让统计图通俗易懂
  11. 【197期】华为OD两轮技术面试记录,给后来人一个参考!
  12. python plot_surface 画表面网格图
  13. 解决winrar压缩文件或文件夹时,文件拒绝访问问题
  14. 瑞科生物通过聆讯:9个月亏损超5亿 君联与红杉是股东
  15. HCL Domino/Notes专业课程和认证体系介绍
  16. 【tools】信息收集-灯塔资产扫描 ARL
  17. mapstruct实体类拷贝替代beanutils
  18. 太阳直射点纬度计算公式_高中地理——每日讲1题(太阳直射点、太阳高度角、极昼、极夜)...
  19. 【Mysql学习之旅-2】经典sql面试题及答案分析
  20. 高考后的计算机培训,高考结束后,家长该马上给孩子“配电脑”吗?大学老师这样说...

热门文章

  1. 谁喝水谁养斑马答案C语言,一群斑马一起在河边喝水,意外打造出条码效果,让人有眩晕的视觉...
  2. 海波龙 11.1.2.4安装指南// hyperion install
  3. 微信支付appid参数不正确
  4. 如何高效学习ARMv8/ARMv9架构知识
  5. 墨绿极简复古风总结汇报PPT模板
  6. Win系统 - 这样清理C盘,一下子多出几十个G
  7. Ubuntu安装jdk-7u80-linux-i586
  8. 单阶段实例分割又一佳作!出自沈春华团队
  9. 计算机内存寿命,终于明白为什么SSD有寿命限制而内存没有?
  10. Shopee卖家该如何选择类目?