Linux命令行与shell脚本编程大全笔记(正则表达式)
*
正则表达式就是所定义的模式模板*
正则表达式不关心数据在数据流中的位置*
都区分大小写*
可以在正则表达式中使用空格和数字*
若使用特殊字符则必须转义(\)反斜线*
特殊字符为: ^ $ . [] * \ 和 ? + {} | ()
基础正则表达式-BRE
字符 | 释义 |
---|---|
^ | 脱字符(行首) |
$ | 美元符(行尾) |
. | 点字符 必须匹配一个字符 |
[] | 字符组 限定待匹配字符 |
* | 星号 零个或多个 |
\ | 反斜杠(转义) |
锚字符(^,$)*
脱字符(^
)定义数据流中文本行的行首开始的模式*
将脱字符放到模式开头的其他位置,则为普通字符,不识别为特殊字符
echo "This is a pan" | sed -n '/^This/p' 行首匹配
*
美元符($
)定义了行尾锚点
echo "this is a pan" | sed -n '/pan$/p' 行尾匹配
echo "this is a test" | sed -n '/^this is a test$/p'
组合使用sed '/^$/d' test1.txt
过滤并删除空白行
点号字符*
点字符用来匹配除换行符之外的任意字符*
必须匹配一个字符,若无任何字符,则模式不成立echo "this is a test" | sed -n '/.is/p'
空格也是字符,可以匹配
字符组*
字符组([]
)限定待匹配的具体字符echo "Yes" | sed -n '/[Yy]es/p'
匹配yes或Yesecho "Yes" | sed -n '/[Yy][Ee][Ss]/p'
单个表达式中的多个字符组echo "111" | sed -n '/[1234]/p'
单个表达式中的匹配多字符
排除型字符组sed -n '/[^ch]at/p'
不匹配cat
和hat
, 排除型字符组需要在字符组开头加上脱字符^
区间-单破折号*(-)
单破折号表示区间sed -n '/^[0-9][0-9][a-z][c-d][e-g]/p' a.txt
区间匹配 :22bdf
sed -n '/^[a-z][c-df-h]/p' a.txt
单个字符组指定多个不连续区间
星号*
在字符后面放置星号表示该字符在匹配模式中出现0次或者多次
echo "this" | sed -n '/thisd*/p'
表示d出现0次匹配上echo "this" | sed -n '/thd*[iI]*s/p'
可以用在字符组上
扩展正则表达式-ERE
字符 | 释义 |
---|---|
? | 问号,出现0次或一次 |
+ | 加号,前面的字符必须出现一次或者多次 |
{} | 花括号,间隔,为重复的表达式指定上下限 |
| | 管道符号,用逻辑或指定表达式的两个或者多个模式 |
() | 圆括号,分组 |
问号*
类似于星号,问号前面的字符只能出现0次或者一次*
可以和字符组一起使用echo "bt" | gawk '/be?t/{print $0}'
匹配0次echo "bet" | gawk '/b[ea]?t/{print $0}'
匹配一次,并搭配字符组echo "beeet" | gawk '/be?t/{print $0}'
不匹配
加号
*加号前面的字符必须出现一次或者多次,否则不匹配echo "bet" | gawk '/be+t/{print $0}'
匹配一次echo "beaet" | gawk '/b[ea]+t/{print $0}'
匹配多次,并且搭配字符组echo "bt" | gawk '/be+t/{print $0}'
不匹配
花括号*
允许为可重复的正则表达式指定一个上限。通常称为间隔* m
正则表达式准确出现m
次* m,n
正则表达式至少出现m
次,至多n
次echo "bet" | gawk '/be{1}t/{print $0}'
匹配准确出现一次echo "beeet" | gawk '/b[ea]{1,3}t/{print $0}'
匹配出现多次,并搭配字符组echo "beeet" | gawk '/be{1,2}t/{print $0}'
不匹配
管道符*
管道符允许检查数据流时,用or
的方式指定正则表达式两个或者多个模式echo "He has a hat." | gawk '/[ch]at|dog/{print $0}'
管道符两侧可以采用任何表达式模式
圆括号*
将正则表达式模式分组时,该组会被视为一个标准字符echo "Sat" | gawk '/Sat(urday)?/{print $0}'
匹配0次echo "Saturday" | gawk '/Sat(urday)?/{print $0}'
匹配1次echo "cat" | gawk '/(c|b)a(b|t)/{print $0}' 模式(c|b)a(b|t)
会匹配第一组,第二组中字母的任意组合
上一篇: linux排序文件命令-----sort
下一篇: linux之排序sort命令详解
推荐阅读
-
Linux命令行和shell脚本编程宝典 Richard Blum
-
《Linux命令行与shell脚本编程大全》 第十五章 学习笔记
-
Linux命令行与shell脚本编程大全笔记(正则表达式)
-
Linux Shell脚本的编程之正则表达式
-
《Linux命令行与shell脚本编程大全》 第十七章 学习笔记
-
Linux命令行与shell脚本编程大全.第3版 第17章
-
《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
-
Linux命令行和shell脚本编程宝典 Richard Blum
-
《Linux命令行与shell脚本编程大全》 第十六章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第四章 学习笔记