什么是通配符(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

8.检索shutdown用户,并显示上下1行的内容?

[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

通配符与正则表达式元字符的理解及grep的实例应用的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. 关于h5中的fetch方法解读(小结)

    这篇文章主要介绍了关于h5中的fetch方法解读(小结),fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,有兴趣的可以了解一下

  4. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  5. ios – 200在xcode 7中生成DSMM警告

    解决方法我有同样的问题.Facebook表示他们已经意识到这一点并且不是高优先级,因为它不会影响应用程序.我回退到4.7.1警告问题不再存在.我不认为它会被拒绝但不能确定.

  6. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  7. xamarin.ios – Facebook iOS SDK:应用程序在启动时找不到“找不到符号:_ACFacebookAppIdKey.”仅在iOS 5中崩溃

    解决方法这是一个已修复的knownbug.目前唯一已知的解决方法是使用较旧版本的FacebookSDK.

  8. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  9. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  10. osx – 无法创建目录/ var / teamsserver

    OpenSSH_6.2p2,OSSLShim0.9.8r8Dec2011debug1:Readingconfigurationdata/etc/ssh_configdebug1:/etc/ssh_configline20:Applyingoptionsfor*debug1:Connectingto1.2.3.4[1.2.3.4]portPORT.debug1:Connectionestablished.Couldnotcreatedirectory‘/var/teamsserver/.ssh’.debug

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部