通配符
* 任意字符,可重复多次?任意字符,重复一次[] 代表一个字符
举例: [a、b、c]表示字母表中任意一个
通配符的作用是用来匹配文件名的
正则表达式
正则表达式是在文件中匹配符合条件的字符串的
限位开关(Limit Switch)查找丙酸纤维素是不支持正则表达式的
但是grep awk sed支持正则表达式
[[电子邮件保护]测试]# touch aa[[电子邮件保护]测试]# touch aab AABB[[电子邮件保护]测试]# ll总计0-rw-r-r-1根根0 19:47年5月16日aa-rw-r - r - 1根0 19:47年5月16日AABB[[电子邮件保护]测试]# ls AaaAb[[电子邮件保护]测试]# ls aa * aa aab AABB
正则表达式特殊字符
正则表达式匹配范围
正则表达式标准字符
使用正则表达式
grep '1' /etc/passwd包含关键字一的行,grep只要包含就行,不想通配符,要完全一致
[[email protected]test]# grep ' 1 '/etc/passwd bin : x :13360 bin :/bin :/sbin/nologinmail 3360 x :8336012: mail 3:/var/spool/mail :/sbin/nologunucp 3360 x :1033333333333333333333都是同样的道理,但是管道符更吃资源
所以
1.匹配含有数字的行
grep"[0-9]"/etc/passwd 2 .匹配连续含有三个数字的行
grep "[0-9][0-9][0-9]"/etc/passwd或者grep ' :[0-9][0-9][0-9]: '/etc/passwd[[电子邮件保护]测试]# grep '[0-9][0-9][0-9]'/etc/passwdgames : x :12:1003360 games 3333:/usr/games 333:/sbin/nologinusbmux d 33: x匹配以r开头n结尾的行
grep '^r.*n$' /etc/passwd .*代表所有[[电子邮件保护]测试]# grep '^r.*n$'/etc/passwd RPC : x :32: RPC绑定守护程序:/var/cache/RPC绑定:/sbin/nologinrtkit : x :499336049733: realtimekit :/proc 3360/sbin/nologinrpc用户:过滤ifconfig,截取互联网协议(互联网协议的缩写)
grep -v代表反向截取,意思就是去除带有某关键字的行一项Linux操作系统指令有替换的意思
[[email protected]test]# ifconfig | grep ' inet addr : ' inet addr :192 . 168 . 126 . 191 Bcast :192 . 168 . 126 . 255 mask :255 . 255 . 0 inet addr 3360127 . 0 . 0 . 1 mask 3360255 . 0 . 0[[email protected]test*//g' 192.168.126.191
这里有一个误解,这就是正则表达式和通配符的区别
我们知道通配符*指的是任何字符,可重复的正则表达式*指的是匹配前一个字符=0次
这两个是完全不同的,所以我怎么知道我使用的*是通配符还是正则表达式
起初,我陷入了一场误会。请看下面的命令列表
[[email protected]test]# touch AC AAC ABC abbc[[email protected]test]# ll total 0-rw-r-r-1根根0 1933 36055年5月16日AAC-rw-r-r-r-1根0 1933 36055年5月16日abbc-rw-r - r - 1根0 1933 36055年5月16日abc-rw-r - r - 1根0 1933 3666
不就是匹配任意数量的字符吗?
事实上,情况并非如此。
通配符用于匹配文件名
正则表达式匹配文件中的匹配字符串
将grep传递给管道操作符后使用grep就不再是匹配的文件名了,它是对文件的操作,所以完全是正则表达式
Grep 'a*c '表示匹配a=0,所以只要包含c就可以了
Grep' a * c $ '也是正则的,这意味着它以a开头,第二个字符匹配零或多次,后面是字母c
所以只有aac和ac符合要求
看看这个例子
[[email protected]test]# lsaac abb abb ABC AC b bb c CB[[email protected]test]# ls | grep ' a* b ' abb cabcbbbcbhere grep ' a * b '并不意味着包含a和b,而是a重复0次或更多次,然后包含b。
以上是边肖介绍的linux下的通配符和正则表达式,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!