CentOS7 自动化运维基础 符号与正则表达式
hyui 2/17/2020 linuxBash
# Shell引号
# 反斜线
- 反斜线将将紧跟其后的单个字符设为字面意义上的字符
- 如果在命令末尾使用\回车后,\可以将回车命令提交功能屏蔽,将回车认为是换行继续输入命令,实现命令的多行输入
[root@Hyui-VM ~]# echo * #显示当前目录所有文件
file1 file2 file3 test.sh
[root@Hyui-VM ~]# echo \* #显示字符*
*
[root@Hyui-VM ~]# echo \>
>
[root@Hyui-VM ~]# find / \ #换行输入多行命令
> -name "test.sh" \
> -type f \
> -size +5M
# 单引号
- 单引号将所有字符还原为字面意义,实现屏蔽Shell元字符的功能
- 单引号必须成对出现
[root@Hyui-VM ~]# echo '$HOME' #单引号屏蔽了$的功能
$HOME
[root@Hyui-VM ~]# echo 'test\' #单引号屏蔽了\功能
test\
# 双引号
- 双引号不会屏蔽'和\和$这三个Shell元字符的含义
- 如果需要屏蔽这些字符含义,必须前置添加一个\符号
[root@Hyui-VM ~]# echo "This's CentOS7" #双引号中的单引号可以单个出现
This's CentOS7
[root@Hyui-VM ~]# echo "$HOME" #正常输出$HOME路径
/root
[root@Hyui-VM ~]# echo "\$HOME" #$符号被屏蔽
$HOME
# 反引号
- Shell中使用反引号进行命令替换,命令替换可以使Shell将命令字符替换为命令执行结果的输出内容,同样功能也可以使用$()来实现
[root@Hyui-VM ~]# echo "Today is $(date +%D)"
Today is 02/17/20
# 正则表达式
- 系统常用编辑工具与正则表达式的对应关系
编辑工具 | 基本正则表达式 | 扩展正则表达式 |
---|---|---|
grep | √ | X |
egrep | √ | √ |
vi | √ | X |
sed | √ | X |
awk | √ | √ |
# 基本正则表达式
# 基本正则表达式含义
符号 | 含义 |
---|---|
c | 匹配字母c |
. | 匹配任意单个字符 |
* | 匹配前一个字符出现零次或多次 |
.* | 匹配任意多个任意字符 |
[] | 匹配集合中的任意单个字符,括号中为一个集合 |
[x-y] | 匹配连续的字串范围 |
^ | 匹配字符串的开头 |
$ | 匹配字串的结尾 |
[^] | 匹配否定,对括号中的集合取反 |
|匹配转义后的字串 | |
{n,m} | 匹配前一个字符重复n到m次 |
{n,} | 匹配前一个字符重复至少n次 |
{n} | 匹配前一个字符n次 |
() | 将(与)之间的内容存储在“保留空间”,最大存储9个 |
\n | 通过\1至\9调用保留空间中的内容 |
# 基本正则表达式案例
[root@Hyui-VM ~]# cp /etc/passwd ./
[root@Hyui-VM ~]# grep root ./passwd #查找passwd文件中包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@Hyui-VM ~]# grep --color :..0: ./passwd #查找:与0之间包含任意两个字符的字串,并用颜色加亮显示该行
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
games:x:12:100:games:/usr/games:/sbin/nologin
[root@Hyui-VM ~]# grep --color 00* ./passwd #查找包含至少一个0的行
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@Hyui-VM ~]# grep --color o[os]t ./passwd #查找包含oot或ost的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@Hyui-VM ~]# grep --color [0-9] ./passwd #查找包含数字0~9的行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
[root@Hyui-VM ~]# grep --color [f-q] ./passwd #查找包含字母f~q的行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
[root@Hyui-VM ~]# grep --color ^root ./passwd #查找开头为root的行
root:x:0:0:root:/root:/bin/bash
[root@Hyui-VM ~]# grep --color bash$ ./passwd #查找以bash结尾的行
root:x:0:0:root:/root:/bin/bash
[root@Hyui-VM ~]# grep --color sbin/[^n] ./passwd #查找sbin/后不跟n的行
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[root@Hyui-VM ~]# grep --color '0\{1,2\}' ./passwd #查找数字0出现一次两次的行
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@Hyui-VM ~]# grep --color "\(root\).*\1" ./passwd #查找包含两个root的行
root:x:0:0:root:/root:/bin/bash
[root@Hyui-VM ~]# grep --color "\(root\)\(:\).*\2\1" ./passwd #查找以root:开头并以:root结尾的字串行
root:x:0:0:root:/root:/bin/bash
[root@Hyui-VM ~]# grep ^$ ./passwd #过滤文件的空白行
[root@Hyui-VM ~]# grep -v ^$ ./passwd #过滤文件的非空白行
# 扩展正则表达式
- 扩展正则表达式及含义
字 符 | 含 义 |
---|---|
{n,m} | 等同于基本正则表达式的{n,m} |
+ | 匹配前一个字符出现一次或多次 |
? | 匹配前一个字符出现一次或零次 |
() | 匹配正则集合 |
- |是匹配逻辑或,即匹配|前后的字串
- 扩展正则表达式案例
[root@Hyui-VM ~]# egrep --color '0{1,2}' ./passwd #查询数字0出现1次或2次的行
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@Hyui-VM ~]# egrep --color '0+' ./passwd #查找至少出现一个0的行
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@Hyui-VM ~]# egrep --color '(root|admin)' ./passwd #查找包含root或admin的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# POSIX规范
- 基本正则表达式会有语系问题,需要用POSIX规范正则表达式规则
# POSIX规范含义
字符集 | 含 义 | 字符集 | 含 义 |
---|---|---|---|
[:alpha:] | 字母字符 | [:graph:] | 非空格字符 |
[:alnum:] | 字母与数字字符 | [:print:] | 任何可以显示的字符 |
[:cntrl:] | 控制字符 | [:space:] | 任何产生空白的字符 |
[:digit:] | 数字字符 | [:black:] | 空格与Tab键字符 |
[:xdigit:] | 十六进制数字字符 | [:lower:] | 小写字符 |
[:punct:] | 标点符号 | [:upper:] | 大写字符 |
# POSIX规范案例
[root@Hyui-VM ~]# grep --color [[:digit:]] ./passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
[root@Hyui-VM ~]# grep --color [[:alpha:]] ./passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
[root@Hyui-VM ~]# grep --color [[:punct:]] ./passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
[root@Hyui-VM ~]# grep [[:space:]] ./passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
# GUN规范
- Linux中的GUN软件一般还会支持转义元字符,转义元字符包括:\b(边界字符)、\B(与\b为反义词)
- 例如 then, hello the world,字串每一个单词前后都有个\b,用\bthe\b匹配单词,但不会匹配then;\B相反,\Bthe\B不会匹配the,只会匹配the在中加的单词
[root@Hyui-VM ~]# grep --color "d\b" ./passwd #匹配d结尾的单词
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
[root@Hyui-VM ~]# grep --color "\W" ./passwd #匹配非单词字符
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin