什么是通配符(glob)?
通配符是Linuxshell中用来描述(匹配)不确定字符的特殊符号.
看看具体通配符是如何描述字符?
*代表任意字符任意次数 ?代表任意单个字符0次或者1次 []代表括号中存在的任意单个字符 [!]代表非括号中存在的任意单个字符 [^]代表指定范围外的任意单个字符 [a-z]代表所有单个小写字母 [A-Z]代表所有单个大写字母 [:digit:]代表所有单个数字 [:upper:]代表所有单个大写字母 [:lower:]代表所有单个小写字母 [:alpha:]代表所有单个字母 [:blank:]代表水平空格或tab键 [:space:]代表空格 [:punct:]代表标点符号 [:xdigit:]代表十六进制
通配符 * 的应用:
[root@localhostrc.d]#ls#列出此目录下的所有内容 init.drc0.drc2.drc4.drc6.drc.sysinit rcrc1.drc3.drc5.drc.local [root@localhostrc.d]#lsrc.*#列出此目录下所有以rc.开头任意长度字符结尾的文件 rc.localrc.sysinit
通配符 ? 的应用:
[root@localhostrc.d]#lsr?#列出以r开头后面紧跟任意单个字符结尾,可与*对照之 rc
通配符 [ ] 的应用:
[root@localhostrc.d]#mkdirb#创建目录b [root@localhostrc.d]#ls#查看目录内容 brcrc1.drc3.drc5.drc.local init.drc0.drc2.drc4.drc6.drc.sysinit [root@localhostrc.d]#ls-d[ib]*#以i或者b开头的目录 binit.d 注意的是:[[?*\]指的是匹配"[","?","\","三个字符中的一个并不代表通配符 [][!]指的同样也是中间的三个字符
通配符 [!] 的应用:
[root@localhostrc.d]#ls-d[!ib]*#i或者b开头的目录 rcrc0.drc1.drc2.drc3.drc4.drc5.drc6.drc.localrc.sysinit
通配符 [^] 的应用:
效果与[!]相同
通配符 [:alpha:] 的应用
效果类似于[]基本相似,只不过匹配内容是描述符所描述的含义
与shell中通配符不同的有另一种描述符?
正则表达式中字符可分为两种:文本字符和元字符.
正则表达式分为基本正则表达式和扩展正则表达式.*centos 正则表达式的支持依赖于perl PCRE模块.
元字符(Metacharacter):在正则表达式中具有特殊意义的字符,使得正则表达式具有文件处理能力.
1.描述字符本身
\转义字符(跳脱字符)其后的字符还原为本来的含义,不做特殊字符 .代表任意单个字符 []代表括号中指定的任意单个字符 [^]代表除括号中指定的任意单个字符 [:alnum:]代表所有的数字和字母中的任意单个字符 [:digit:]代表所有数字中的任意单个字符 [:alpha:]代表所有英文字母中的任意单个字符 [:lower:]代表所有小写英文字母中的任意单个字符 [:upper:]代表所有大写英文字母中的任意单个字符 [:space:]代表空格 [:punct:]代表标点符号 [:blank:]代表水平空格或tab键
2.描述字符出现次数
基本正则: *代表前面单个字符或字符串(分组)出现任意次 \?代表前面单个字符或字符串(分组)出现零次或一次 \+代表前面单个字符或字符串(分组)出现至少一次 \{n\}代表前面单个字符或字符串(分组)出现n次 \{m,n\}代表前面单个字符或字符串(分组)至少出现m次至多出现n次 \{m,\}代表前面单个字符或字符串(分组)至少出现m次多则不限 \{,n\}代表前面单个字符或字符串(分组)至多出现n次少则不限 扩展正则: *代表前面单个字符或字符串(分组)出现任意次 ?代表前面单个字符或字符串(分组)出现零次或一次 +代表前面单个字符或字符串(分组)出现至少一次 {n}代表前面单个字符或字符串(分组)出现n次 {m,n}代表前面单个字符或字符串(分组)至少出现m次至多出现n次 {m,}代表前面单个字符或字符串(分组)至少出现m次多则不限 {,n}代表前面单个字符或字符串(分组)至多出现n次少则不限
3.描述字符的位置(位置锚定)
^代表以紧跟其后的字符开头的行 $代表以紧跟其后的字符结尾的行 \<代表以紧跟其后的字符或字符串做单词的开头 \>代表以紧跟其后的字符或字符串做单词的结尾 \<\>代表以中间字符或字符串为整个单词 \b\b是\c\>的另一种表示方法 分组()多个字符括起来作为一个整体字符串使用 几个常用组合: ^$代表空行 .*代表任意字符出现任意次
grep 命令简单用法:搜索文本中的所需的关键字
grep[OPTIONS]PATTERN[FILE...] grep[OPTIONS][-ePATTERN|-fFILE][FILE...] -i忽略关键字大小写 -n显示搜索到的内容在原文件中的行 -v取反显示;显示没有匹配到的行 -c显示匹配到内容多少行 -o仅显示匹配到的字符串 -An显示匹配到的内容的行及后n行 -Bn显示匹配到的内容的行及前n行 -Cn显示匹配到的内容的行及前后n行 -e指定多个关键字 grep-e"root"-e"ntp"/etc/passwd -w显示匹配到内容的单词数 -E使用扩展的正则表达式相当于egrep
元字符的应用:
1.去掉/etc/rc.d/rc.local中的#开头和空行?
[root@localhostrc.d]#catrc.local #!/bin/sh # #Thisscriptwillbeexecuted*after*alltheotherinitscripts. #Youcanputyourowninitializationstuffinhereifyoudon't #wanttodothefullSysVstyleinitstuff. touch/var/lock/subsys/local [root@localhostrc.d]#catrc.local|egrep-v^$|grep-v^# touch/var/lock/subsys/local 简化: [root@localhostrc.d]#catrc.local|grep-v-E"^#|^$" touch/var/lock/subsys/local
2.取出ifconfig的ip地址
[root@localhostrc.d]#ifconfig|egrep-o-E\([0-2]?[0-9]?[0-9]\.\){3}[0-9]+|head-1 172.16.253.171 简化: [root@localhostrc.d]#ifconfig|egrep-o"([0-9]+\.){3}[0-9]+"|head-1 172.16.253.171 另一种方法: [root@localhostrc.d]#ifconfig|grep"inetaddr"|cut-d:-f2|cut-d""-f1| head-1 172.16.253.171
3.找出/etc/passwd中用户名与shellming相同的?
[root@localhostrc.d]#cat/etc/passwd|grep--color=auto-E"(^[[:alnum:]]+):.*\1$" sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt
4.找出/var目录下所有的以.log结尾的文件所在路径?
[root@localhostrc.d]#find/var-name*.log|grep-o-E"/.*/"|uniq /var/log/audit/ /var/log/gdm/ /var/log/tuned/ /var/log/anaconda/ /var/log/ /var/log/mariadb/ /var/log/
5.找出/var目录下所有的以.log结尾的文件所在基名?
[root@localhostrc.d]#find/var-name*.log#查找出/var下所有的.log结尾的文件 /var/log/audit/audit.log /var/log/gdm/:1.log /var/log/gdm/:0-greeter.log /var/log/gdm/:0.log /var/log/tuned/tuned.log /var/log/anaconda/anaconda.log /var/log/anaconda/X.log /var/log/anaconda/program.log /var/log/anaconda/packaging.log /var/log/anaconda/storage.log /var/log/anaconda/ifcfg.log /var/log/anaconda/ks-script-jwlu_8.log /var/log/anaconda/journal.log /var/log/vmware-vmsvc.log /var/log/Xorg.9.log /var/log/wpa_supplicant.log /var/log/yum.log /var/log/vmware-vmusr.log /var/log/mariadb/mariadb.log /var/log/Xorg.0.log /var/log/pm-suspend.log /var/log/pm-powersave.log /var/log/boot.log [root@localhostrc.d]#find/var-name*.log|grep-o-E"[^/]*$"#正则取出基名 audit.log :1.log :0-greeter.log :0.log tuned.log anaconda.log X.log program.log packaging.log storage.log ifcfg.log ks-script-jwlu_8.log journal.log vmware-vmsvc.log Xorg.9.log wpa_supplicant.log yum.log vmware-vmusr.log mariadb.log Xorg.0.log pm-suspend.log pm-powersave.log boot.log
6、找出/proc/meminfo文件中,所有以大写或小写s开头的行,两种方式:
[root@localhostrc.d]#cat/proc/meminfo|grep-E"^[s|S].*" SwapCached:0kB SwapTotal:2097148kB SwapFree:2097148kB Shmem:9132kB Slab:148756kB SReclaimable:88588kB SUnreclaim:60168kB [root@localhostrc.d]#cat/proc/meminfo|egrep-i"^s.*" SwapCached:0kB SwapTotal:2097148kB SwapFree:2097148kB Shmem:9132kB Slab:148756kB SReclaimable:88588kB SUnreclaim:60168kB
7.检索出不以/sbin/nologin为shell的用户,并显示该用户信息在原文件中的行号?
[root@localhost~]#egrep-n-v"\</sbin/nologin$"/etc/passwd 1:root:x:0:0:root:/root:/bin/bash 6:sync:x:5:0:sync:/sbin:/bin/sync 7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8:halt:x:7:0:halt:/sbin:/sbin/halt
[root@localhostlogs]#egrep-C1"^shutdown"/etc/passwd sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt
9.检索出属主ID(UID),属组ID(GID)相同的用户?
[root@localhostlogs]#egrep"\<([0-9]+)\>:\1"/etc/passwd|cut-d:-f1 root bin daemon nobody systemd-bus-proxy systemd-network dbus abrt tss rpc usbmuxd
如有任何错误请多多指教
“老城小叙“的个人博客:http://cityx.blogcitys.com
原文链接:https://www.f2er.com/regex/358428.html