Shell语言基本语法总结(4)正则表达式与文本处理之grep
文章目录
- 七、正则表达式
- 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位于同一个位置,因此可以利用()括起来代表二取其一。
- 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相关推荐
- 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脚本:正则表达式与文本处理器三剑客grep,egrep, sed,awk
正则表达式定义 正则表达式,又称正规表达式.常规表达式 使用字符串来描述.匹配一系列符合某个规则的字符串 ●正则表达式组成 ◆普通字符 大小写字母.数字.标点符号及一些其他符号 ◆元字符 在正则表达式 ...
- 独一无二 Shell 编程之正则表达式 与文本处理器 详细解释
技能展示: 基础正则表达式 扩展正则表达式 sed 工具使用方法 awk 工具使用方法 4.1 正则表达式 之前学习了 Shell 脚本的基础用法,已经可以利用条件判断.循环等语句编辑 Shell 脚 ...
- Shell编程之正则表达式与文本编辑器
一.正则表达式 1.正则表达式概述 通常用于判断语句中,用来检查某一字符串是否满足某一格式 正则表达式是由普通字符与元字符组成 普通字符包括大小写字母.数字.标点符号及一些其他符号 元字符是指在正则表 ...
- Linux学习笔记(七)——shell语言
七.Shell语言 (一).shell概述 1.Shell简介 · Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂 ...
- Shell的基本语法结构
Shell的基本语法结构 文章目录 Shell的基本语法结构 一.SHELL介绍 1. 编程语言分类 2. shell简介 3. shell脚本 二.变量的定义 1. 变量是什么? 2. 什么时候需要 ...
- Shell脚本之正则表达式以及文本编辑器
目录 一.正则表达式 1.定义 2.元字符 元字符使用(这里举例为常用的元字符) 3.表示次数 (1)匹配字符 (2)查看子网掩码信息 4. 位置锚定 5.扩展正则表达式 (1)表示次数 (2)表示分 ...
- linux 系统 Shell语言 基础
linux 系统 Shell语言 基础 第一章 Shell 编程 1 . 概述 Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Sh ...
- GO 语言基础语法一 (快速入门 Go 语言)
Go语言基础语法 一. golang 标识符,关键字,命名规则 二. golang 变量 三. golang 常量 四. golang 数据类型 五. golang 布尔类型 六. golang 数字 ...
最新文章
- Apache服务器部署(1)
- Java虚拟机类装载的原理及实现
- mybatis复杂查询环境 多对一的处理 按照结果嵌套处理和按照查询嵌套处理
- java c 基本类型_java 基本数据类型
- 如果王思聪是产品经理
- Cocos2d-x Lua中实例:帧动画使用
- SCCM 2012 R2 从入门到精通 Part11 系统推送(2)
- SpringCloud学习笔记016---在windows下搭建的Redis服务_在SpringBoot中使用Redis
- 马云还曾有过这么一段求职经历
- 从源代码中加载res / values / dimension.xml中的维度值
- docker+MySQL+读写分离
- 《超实用的HTML代码段》阅读笔记1——HTML5自动聚焦
- windows10安装CUDA
- vue 固定div 滚动_Vue - 让水平滚动条(scroll bar)固定在浏览器的底部
- Java白盒测试工具
- 系统集成项目管理工程师中高级一次通过经验之谈
- table样式设置小结
- [讨论] AUTOCAD二次开发简介
- 蚂蚁聚宝虫洞,数据传输的桥梁
- 一波三折的卖身路,网易考拉去向何方
热门文章
- 如何下载网页中的json文件
- Rancher 添加主机失败的解决方法
- hp台式机计算机编号怎么查,惠普电脑如何通过SN码查询配置
- MT41K256M16TW-107 AUT:P美光内存颗粒D9TRN
- keil的sct文件_Keil sct分散加载文件
- java打地鼠游戏教案,幼儿园打地鼠游戏教案
- E-R图画法解析----概念模型的一种表示方法
- 用精密减压阀控制空气采样泵气体压力
- 超声波测距仪编程_基于单片机的超声波测距仪设计
- 简单观察HoudiniAssetComponent状态(AssetState)的变化过程