宝哥软件园

linux下的通配符与正则表达式

编辑:宝哥软件园 来源:互联网 时间:2021-09-04

通配符

* 任意字符,可重复多次?任意字符,重复一次[] 代表一个字符

举例: [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下的通配符和正则表达式,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

更多资讯
游戏推荐
更多+