这篇文章上次修改于 1689 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
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
没有评论