文章目录

  • 七、正则表达式
    • 7.1、通配符 * { } [ ] [^] ?
    • 7.2、单引号、双引号、不加引号、反引号
    • 7.3、正则表达式概述
    • 7.4、 转义符号(空白符) \n \t \r \v \0 \b
    • 7.5、BRE- ^ $ 以...开头/结尾的行
    • 7.6、BRE- . 匹配除换行符之外的任意单个字符
    • 7.7、BRE- * 匹配重复0次及以上次数的字符
    • 7.8、BRE- .* 所有
    • 7.9、BRE- \[ ] 括号中的任意一个字符 ; [^] 不是括号中的字符
    • 7.10、ERE- + 匹配前面字符连续出现1次或多次
    • 7.11、ERE- ?匹配前面字符 0 次或 1 次
    • 7.12、ERE- | 或 匹配竖杠两边的任意一个
    • 7.13、ERE- a{n,m} 匹配前面字符a至少出现n次,最多m次
    • 7.14、ERE- () 括号里的相当于一个整体;
    • 7.15、字母符号 \w \W \b \S \s
    • 7.16、Posix字符
  • 八、文本处理之grep
    • 8.1、-w 精确匹配单词
    • 8.2、-c 匹配的总行数 -x 匹配整行 -v 显示非匹配的 -n 显示行号
    • 8.3、-e 多模式匹配 ;-m n 显示前n个匹配内容

七、正则表达式

7.1、通配符 * { } [ ] [^] ?

通配符 解释
* 匹配所有字符,可以输出一个或多个字符
{ } 生成序列
[ ] [a-z]匹配小写字母任何一个
[^] 取反排除
? 匹配任何一个字符,只匹配一个字符
  • * 与 ?区别展示 :查找当前目录下的txt文件
[hadoop1@hadoop1 test]$ ls *.txt
aaa.txt  a.txt  b.txt
[hadoop1@hadoop1 test]$ ls ?.txt
a.txt  b.txt
[hadoop1@hadoop1 test]$ ls ???.txt
aaa.txt
  • { } 生成序列 :创建test1…test10命名的文本文件
[hadoop1@hadoop1 test]$ touch test{1..10}.txt
[hadoop1@hadoop1 test]$ ll
总用量 16
-rw-rw-r-- 1 hadoop1 hadoop1  80 5月  25 13:01 aaa.txt
-rwxrwxr-x 1 hadoop1 hadoop1 373 5月  21 19:36 a.sh
-rw-rw-r-- 1 hadoop1 hadoop1  80 5月  25 13:01 a.txt
-rw-rw-r-- 1 hadoop1 hadoop1  50 5月  25 13:01 b.txt
drwxr-xr-x 2 hadoop1 hadoop1  23 5月  22 11:59 test1
-rw-rw-r-- 1 hadoop1 hadoop1   0 5月  25 13:24 test10.txt
-rw-rw-r-- 1 hadoop1 hadoop1   0 5月  25 13:24 test1.txt
-rw-rw-r-- 1 hadoop1 hadoop1   0 5月  25 13:24 test2.txt
-rw-rw-r-- 1 hadoop1 hadoop1   0 5月  25 13:24 test3.txt
-rw-rw-r-- 1 hadoop1 hadoop1   0 5月  25 13:24 test4.txt
-rw-rw-r-- 1 hadoop1 hadoop1   0 5月  25 13:24 test5.txt
-rw-rw-r-- 1 hadoop1 hadoop1   0 5月  25 13:24 test6.txt
-rw-rw-r-- 1 hadoop1 hadoop1   0 5月  25 13:24 test7.txt
-rw-rw-r-- 1 hadoop1 hadoop1   0 5月  25 13:24 test8.txt
-rw-rw-r-- 1 hadoop1 hadoop1   0 5月  25 13:24 test9.txt
  • [ ] 与 [^] 分别查找字符串“123asDe6ht893”中的字母与非字母

7.2、单引号、双引号、不加引号、反引号

引号类型 解释
单引号 ’ ’ 所见即所得,单引号里面是什么就输出什么
双引号 " " 双引号里面的特殊符号与变量会被解析
不加引号 支持通配符
反引号 ` ` 优先执行反引号里面的命令 (位于键盘的ESC下面)
  • 分别利用不同引号打印这句话my name is `hostname` {1…4}
# 单引号 :所见即所得 尽管hostname在反引号里,但整体在单引号里面 不解析原有含义
[hadoop1@hadoop1 test]$ echo 'my name is `hostname` {1..4}'
my name is `hostname` {1..4}
# 双引号 :解析原含义 反引号优先解析hostname主机名;双引号不支持通配符
[hadoop1@hadoop1 test]$ echo "my name is `hostname` {1..4}"
my name is hadoop1 {1..4}
# 不加引号:优先解析反引号;支持通配符
[hadoop1@hadoop1 test]$ echo my name is `hostname` {1..4}
my name is hadoop1 1 2 3 4

7.3、正则表达式概述

  • 功能:匹配字符(主要工具grep、sed、awk)
  • 注意:
    • 1️⃣所有符号均为英文状态下的符号
    • 2️⃣推荐使用grep工具(过滤命令,先了解,后面深入介绍)或网站正则解析,看看正则执行过程或匹配了什么内容;必须要亲手操作,才有印象
  • 分类:
    • 1️⃣基础正则BRE(basic regular express):^ $ ^$ . * [] [^]
    • 2️⃣扩展正则ERE(extend regular express):| + {} () ? 使用grep时需-E才可以;或者利用egrep命令
  • 通配符和正则区别:
    • 通配符:文件/目录 文件名 处理的是参数;Linux大部分命令可以使用
    • 正则: 进行过滤 在一个文件中查找内容;Linux中的grep\sed\awk支持
# a.txt文件内容
1This a Linux testfile!
2This is a linux testfile! 1java tes
3python test
1lalala# b.txt 文件
aabbbc
defrrg
klvvvvvvf
ffffghlllll
hhhhhhhhhhggf
eeeeeeeeeeeeeegrtrhk
23456defrh44444

7.4、 转义符号(空白符) \n \t \r \v \0 \b

空白符 描述
\n 换行符,重要
\r 回车符
\t 水平制表符,重要
\v 垂直制表符
\0 空值符
\b 退后一格
  • 执行前必须加 “-e” 支持转义字符,否则结果如下:
[hadoop1@hadoop1 test]$ echo "123\n456"
123\n456
[hadoop1@hadoop1 test]$ echo "123\t456"
123\t456
  • 加上-e后的打印输出
[hadoop1@hadoop1 test]$ echo -e "123\n456"
123
456
[hadoop1@hadoop1 test]$ echo -e "123\t456"
123    456
[hadoop1@hadoop1 test]$ echo -e "123\b456"
12456
[hadoop1@hadoop1 test]$ echo -e "123\r456"
456
[hadoop1@hadoop1 test]$ echo -e "123\v456"
123456

7.5、BRE- ^ $ 以…开头/结尾的行

  • 查找以 “1” 开头的行
  • 查找以 “t” 结尾的行
  • 匹配空行 (-n显示行号)
  • 匹配非空行(-v显示与正则不匹配的行)
  • 查找以 “1” 开头以 “s” 结尾的行见7.8 .*

7.6、BRE- . 匹配除换行符之外的任意单个字符

  • 匹配任意单字符 ( -o显示查找过程,过程:从第一行的第一个字符开始查找,因此一个字符一行内容)

  • 匹配以 . 结尾的行 (.在正则中为任意字符的意思,所以.$会匹配任意字符(初换行符)结尾的行;要想.为原本含义,需加反斜杠进行转义)

7.7、BRE- * 匹配重复0次及以上次数的字符

贪婪性:连续出现时,尽可能多的匹配

  • 字符串中连续出现的2(一次及以上)

7.8、BRE- .* 所有

  • 查找 以任意内容开头到a的行
  • 查找以 “1” 开头以 “s” 结尾的行
    [hadoop1@hadoop1 test]$ grep "^1.*s$" a.txt
    1java tes
    

可以看一下不加.*和加.\*的区别:不加.*就是指改行内容只有1s;.加了\*才是指1开头s结尾的正则

7.9、BRE- [ ] 括号中的任意一个字符 ; [^] 不是括号中的字符

  • 匹配数字
  • 匹配字母(忽略大小写 可以用-i忽略大小写)
  • 以大写字母开头,小写字母或空格结尾的行
  • 不是以大写字母开头的行 [^] (^在括号内就是非的意思;在括号外就是以括号里字符开头的意思)

7.10、ERE- + 匹配前面字符连续出现1次或多次

  • 查找字母h出现次数达到1次及以上 (-o只显示匹配到的内容)

7.11、ERE- ?匹配前面字符 0 次或 1 次


  • 查找def的前面字符为任意字符的 (.?代表一个字符或者没有字符;…?第一个.表示一个任意字符,第二个.?表示一个或没有字符;所以意思就是def前至少含有一个字符)

7.12、ERE- | 或 匹配竖杠两边的任意一个

|和[]区别

符号 共同点 区别 示例
| 或者 可以是一串字符,可以匹配单词等 cat|dog 匹配cat 或dog
[ ] 或者 只能匹配其中的单个字符 [dog cat] 匹配的是d o g c a t 字母之一

7.13、ERE- a{n,m} 匹配前面字符a至少出现n次,最多m次

  • f连续出现次数的范围在2—5之间

7.14、ERE- () 括号里的相当于一个整体;

# 数据准备
echo -e "ccat\npcut\nctg\nabcg"
ccat
pcut
ctg
abcg
  • 寻找单词cat和cut

    • cat和cut只有中间字母不一样,就能想到用ca|ut ,但是很明显 这是获取ca或者ut,而a和u位于同一个位置,因此可以利用()括起来代表二取其一。

7.15、字母符号 \w \W \b \S \s

特殊字符 描述
\w 匹配任意数字和字母,等效[a-zA-Z0-9]
\W 与\w 相反,等效[^a-zA-Z0-9]
\b 匹配字符串开始或结束,等效^和$
\s 匹配任意的空白字符,如\n\t等
\S 匹配非空白字符

7.16、Posix字符

Posix字符 描述
[:alnum:] 等效[a-zA-Z0-9]
[:alpha:] 等效[a-zA-Z]
[:lower:] 等效[a-z]
[:upper:] 等效[A-Z]
[:digit:] 等效[0-9]
[:space:] 匹配任意空白字符,等效[\t\n\r\f\v]
[:graph:] 非空白字符
[:blank:] 空格与定位字符
[:cntrl:] 控制字符
[:print:] 可显示的字符
[:punct:] 标点符号字符,等 价 于[-!”#$%&’()*+,./:;<=>?@[]_‘
[:xdigit:] 十六进制

正则表达式总结

基础正则 解释
^ 匹配前面字符串开头; ^a
$ 匹配前面字符串结尾; a$
^$ 空行
. 匹配除换行符(\n)之外的任意单个字符
* 匹配前一个字符零次或多次
.* 所有,贪婪性
[ ] 匹配中括号之中的任意一个字符; [a-z] [A-Z] [0-9] [abc]
[^] 匹配[^字符]之外的任意一个字符; [^abc] abc之外的字符
\t 制表符 tab键
\n 换行符
扩展正则 解释
+ 匹配前面字符 1 次或多次
匹配前面字符 0 次或 1 次
{n}或{n,} 匹配花括号前面字符至少 n个字符
{,m} 匹配花括号前面字符至多m个字符
{n,m} 匹配花括号前面字符至少 n个字符,最多 m 个字符
( ) 1、表示整体
2、向后引用(反向引用)
\n 反向引用,n 是数字,从 1 开始编号,表示引用第 n 个分组匹配的内容
| 匹配竖杠两边的任意一个

八、文本处理之grep

  • Linux grep 命令用于查找文件里符合条件的字符串。
  • grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一行显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
  • 只输出含有查找内容的那一行
  • 用法:grep [选项] 正则表达式 [文件或目录…]
选项 描述
grep -E ==egrep 模式是扩展正则表达式(ERE),不需要加反斜杠的
-e 使用模式匹配,可指定多个模式匹配
-i 忽略大小写
-w 模式匹配整个单词
-x 模式匹配整行
-v 打印不匹配的行
-r 递归目录查找
-n 打印行号
-m 数字 输出前m个匹配
-c 输出匹配的行数
  • 太多了,不一一展示了,更多的参数选择参考菜鸟教程:Linux grep 命令
# 数据准备 a.txt
This a linuxtestfile!
This is a linux testfile!
java test
python test
mysql
hadoop hive
linux

8.1、-w 精确匹配单词

8.2、-c 匹配的总行数 -x 匹配整行 -v 显示非匹配的 -n 显示行号

8.3、-e 多模式匹配 ;-m n 显示前n个匹配内容

  • -e用法:grep -e “正则” -e “正则” 文件

Shell语言基本语法总结(4)正则表达式与文本处理之grep相关推荐

  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. 七:Shell脚本:正则表达式与文本处理器三剑客grep,egrep, sed,awk

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

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

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

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

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

  5. Linux学习笔记(七)——shell语言

    七.Shell语言 (一).shell概述 1.Shell简介 · Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂 ...

  6. Shell的基本语法结构

    Shell的基本语法结构 文章目录 Shell的基本语法结构 一.SHELL介绍 1. 编程语言分类 2. shell简介 3. shell脚本 二.变量的定义 1. 变量是什么? 2. 什么时候需要 ...

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

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

  8. linux 系统 Shell语言 基础

    linux 系统 Shell语言 基础 第一章 Shell 编程 1 . 概述 ​ Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Sh ...

  9. GO 语言基础语法一 (快速入门 Go 语言)

    Go语言基础语法 一. golang 标识符,关键字,命名规则 二. golang 变量 三. golang 常量 四. golang 数据类型 五. golang 布尔类型 六. golang 数字 ...

最新文章

  1. Apache服务器部署(1)
  2. Java虚拟机类装载的原理及实现
  3. mybatis复杂查询环境 多对一的处理 按照结果嵌套处理和按照查询嵌套处理
  4. java c 基本类型_java 基本数据类型
  5. 如果王思聪是产品经理
  6. Cocos2d-x Lua中实例:帧动画使用
  7. SCCM 2012 R2 从入门到精通 Part11 系统推送(2)
  8. SpringCloud学习笔记016---在windows下搭建的Redis服务_在SpringBoot中使用Redis
  9. 马云还曾有过这么一段求职经历
  10. 从源代码中加载res / values / dimension.xml中的维度值
  11. docker+MySQL+读写分离
  12. 《超实用的HTML代码段》阅读笔记1——HTML5自动聚焦
  13. windows10安装CUDA
  14. vue 固定div 滚动_Vue - 让水平滚动条(scroll bar)固定在浏览器的底部
  15. Java白盒测试工具
  16. 系统集成项目管理工程师中高级一次通过经验之谈
  17. table样式设置小结
  18. [讨论] AUTOCAD二次开发简介
  19. 蚂蚁聚宝虫洞,数据传输的桥梁
  20. 一波三折的卖身路,网易考拉去向何方

热门文章

  1. 如何下载网页中的json文件
  2. Rancher 添加主机失败的解决方法
  3. hp台式机计算机编号怎么查,惠普电脑如何通过SN码查询配置
  4. MT41K256M16TW-107 AUT:P美光内存颗粒D9TRN
  5. keil的sct文件_Keil sct分散加载文件
  6. java打地鼠游戏教案,幼儿园打地鼠游戏教案
  7. E-R图画法解析----概念模型的一种表示方法
  8. 用精密减压阀控制空气采样泵气体压力
  9. 超声波测距仪编程_基于单片机的超声波测距仪设计
  10. 简单观察HoudiniAssetComponent状态(AssetState)的变化过程