POSIX标准将正则分为两类
基本正则
扩展正则
文章目录
基本正则表达式元字符集合及其意义
基本正则表达式元字符集合及其意义
元字符 意义 举例
* # 匹配前一个普通字符0次或多次重复 hel*o,可以匹配heo,hello,helllo
. # 匹配任意一个字符,或者空格 ..73.,可以匹配45732,4 732
^ # 匹配行首,或在[]里面匹配后面字符的非-取反 ^clean,匹配以clean开头的行,[^b-d]表示匹配非b,c,d的字符
$ # 匹配行尾 nologin$,匹配以nologin结尾的行
[] # 匹配字符集合 [0123456789],匹配任意一个数字(穷举)
\ # 转义符,屏蔽一个元字符的特殊意义
\< \> # 精确匹配符号 \<this\>,精确匹配this这个单词,不会匹配thiser等
\{n\} # 匹配前面字符出现n次 hel\{2\}o,精确匹配l两次,匹配hello
\{n,\} # 匹配前面字符至少出现n次 hel\{2,\}o,匹配l至少两次
\{n,m\} # 匹配前面字符出现n~m次 hel\{2,3\}o匹配l次数为2到3次
基本正则的常见用法
^$ # 匹配空行
^.$ # 匹配只包含一个字符的行 #注意:空格也算是字符
[]中括号结构 常见用法
[0-9] # 匹配任意一个数字(范围)
[^b-d] # 匹配除了b到d之间(b,c,d)的任意字符
[xyz] # 匹配字符x, y, 或z
[B-Pk-y] # 匹配从B到P, 或者从k到y之间的任意一个字符.
[a-z0-9] # 匹配任意小写字母或数字
[Yy][Ee][Ss] # 能够匹配yes, Yes, YES, yEs等各种组合
扩展正则表达式元字符集合及其意义
扩展正则表达式元字符集合及其意义
元字符 意义 举例
? # 匹配前面那个字符0次或者一次 jo?b,可以匹配jb,job,joob
+ # 匹配前面那个字符1次或多次,与*类似 se+,可以匹配see,seee
() # 表示一个字符集合或用在expr中 re(a|e|d)d,可以匹配read,reed,redd,等价于re[aed]d
| # 表示或,匹配一组可选的字符 正则1|正则2|正则3|...
bash的通配符
bash shell本身不支持正则表达式,但shell支持通配,使用正则的是shell命令和工具如sed,grep,awk,
通配元字符及其意义
元字符 意义 举例
* # 表示任意字符 rm ./*
? # 表示一个任意字符 ls /et?
^ # 表示取反 ls /var/log/[a-z]*.[^awk]*匹配任意一个以字母开头,不以awk结尾的日志
[] # 字符集 ls /var/log/[a-z]*.log,匹配任意以字符开头的日子文件
{} # 表示一组表达式的集合 ls /var/log/{[a-z]*.[^awk]*,[a-z]*.log},满足其中任意一个,是或的关系
通配的常见用法
cp ifcfg-eth0{,.bak} # 将网卡文件复制以.bak备份一次,相当于:cp ifcfg-eth0 ifcfg-eth0.bak
ls -l {b*,c*,*est*} # 能够匹配b开头,c开头,以及保护est的字符(注意不会只匹配es哦)
POSIX字符类, 格式[:class:],建议引用是用[[ ]]双中括号
[[:alpha:]] # 表示字母,等价于[a-zA-Z]
[[:alnum:]] # 表示字母和数字,等价于[0-9a-zA-Z]
[[:lower:]] # 匹配小写字母
[[:upper:]] # 匹配大写字母. 等价于[A-Z]
[[:digit:]] # 匹配(十进制)数字. 等价于[0-9]
[[:xdigit:]] # 匹配16进制数字. 等价于[0-9A-Fa-f]
[[:space:]] # 匹配空白字符(空格和水平制表符)
[[:blank:]] # 匹配一个空格或是一个制表符(tab)
[[:cntrl:]] # 表示ctrl键
子shell 介绍 (并行场景也是能考虑应用子shell)
#子shell介绍
#什么是子shell:由父shell fork出来的shell
#如何使用子shell:只需要使用括号()即可
注意:{} 不会启用子shell ,只有()才能启用子shell
( command1; command2; ) # 会启用子shell
{ command1; command2; } # 不会启用子shell
#子shell有什么特点
1、子shell中的变量不会影响父shell变量
2、在子shell中切换了目录,不影响父shell的目录(也就是说不需要切回来)
示例:
#!/bin/bash
#注意看变量a被两次赋值,但是相互不影响
a=123
( a=456; echo $a )
echo $a
什么是命令替换
什么是命令替换:
将一个命令的结果,赋值给另一个变量
命令替换的形式:
dir_contents=`ls -al`
dir_contents=$(ls -al)
什么是进程替换
什么是进程替换:
把一个进程的输出,作为另一个进程的输入(换句话说, 它把一个命令的结果发给了另一个命令)
进程替换的形式:
>(command) # 注意>( 之间不能有空格
<(command) #
| # 这也是一种特殊的 进程替换
示例展示:
comm <(ls -l) <(ls -al) # 进程替换可以比较两个不同命令的输出, 甚至能够比较同一个命令不同选项情况下的输出
diff <(ls /root/test1) <(ls /root/test2) # 用进程替换来比较两个不同目录的内容(可以查看哪些文件名相同, 哪些文件名不同)
cat <(ls -l) # 等价于 ls -l | cat
sort -k 9 <(ls -l /bin) <(ls -l /usr/bin) <(ls -l /usr/X11R6/bin) # 列出系统3个主要'bin'目录中的所有文件, 并且按文件名进行排序.注意是3个(查一下, 上面就3个圆括号)明显不同的命令输出传递给'sort'.
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论