Linux 通配符和正则表达式

通配符

被shell解释器解释的符号就是通配符,通配符是用来匹配文件名,不能用来匹配字符串(通配符只能用来匹配现有文件的,不能用来生成文件)

通配符一般用的就是以下三个:

1、星号:*
作用:表示任意个字符(不包括隐藏文件)

2、问号:?
作用:单个任意字符(中文也算一个字符)

3、中括号:[ ]
作用:表示匹配一范围或者其中一个

中括号三种使用方法:

(1)表示范围

  • [asdfg]: 表示匹配这几个字符中的其中一个
  • [0-9]:表示0-9之间的任意一个数字

(2)表示其中之一

  • [a-z] :不但包括了小写字母 还包含了大写字母)(次序:小大小大...)

(3)表示不包含

  • [^fdsfs] :匹配列表中的所有字符以外的字符
  • [^a-z]:匹配列表中的所有字符以外的字符

基本上大多数命令都是直接或间接支持通配符。
例如:ls、cp、grep、rm、mv、find、tar、du(仅用于指定目录路径或特定文件)、cat、chmod、chown等。

linux预定义的字符类:

  • [[:lower:]]:表示任意小写字母,表示 a-z

  • [[:upper:]]: 表示任意大写字母,表示 A-Z

  • [[:digit:]]:表示任意数字,相当于0-9

  • [:alpha:]: 表示任意大小写字母

范例:

# 1、显示/etc目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录列表
l*[0-9]*[[:lower:]]

# 2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录列表
[0-9]*[^0-9]

# 3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录列表
[^a-z][a-z]*

# 4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录列表
rc[0-6]*

# 5、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录列表
[mnrp]*.conf

# 6、只显示/root下的隐藏文件和目录列表
ls -a /root/.*

# 7、只显示/etc下的隐藏目录列表
ls -d /etc/.*  (-d表示不进入目录中,只查看目录的本身)

正则表达式

  • 正则表达式分为基本正则表达式和扩展正则表达式。扩展正则是基本正则的功能延伸和增强,从而实现更复杂和强大的匹配能力。

  • 正则表达式不是被shell解释器解释执行,而是被指定的命令解释,例如grep、ark、sed等

  • 如果一个命令只支持基本正则元字符,如果他要使用扩展元字符的话,需要使用转义字符(\)进行转义才行,不然该命令就会把他当成一个普通字符处理。

元字符:含有特定含义的特殊字符就叫做元字符。

基本正则有5个元字符 ^ $ . [] *

1、元字符:^

  • 作用:表示以什么开头

  • 例如:以为root开头 ^root

2、元字符:$

  • 作用:以什么结尾

  • 例如:以root结尾 root$

3、元字符:.

  • 作用:表示任意一个字符

  • 例如:a.b 表示a开头,中间任意一个字符,b结尾的字符

4、元字符:*

  • 作用:表示该符号前面的字符出现0次或多次(默认贪婪模式,会找尽可能离它远的)
  • 例如:a* 表示a出现0次或者多次

5、元字符:[ ]

  • 作用:匹配指定的任意一个字符之一,里面写啥就匹配啥,里面的符号不具备特殊含义(意思就是比如号在基本正则里面表示表示任意一个字符,但是放在中括号里面后,就是号这个字符,不包含其它意思)

元字符[ ]的使用

  • 匹配一个字符:例如:[13578] 表示匹配1或3或5或...

  • 匹配一个范围:例如:[a-z] 表示字符从a-z之间的任意一个

  • 取反:表示不匹配里面的内容 例如:[^abcd] 表示不匹配abcd中的任意一个字符

例如:grep过滤自身进程

ps aux | grep [s]sh

# 解释:grep命令支持基本正则表达式,所以grep [s]sh等价于grep ssh,
# 但是gerp进程里面的参数还是[s]sh(grep --color=auto [s]sh),所以就把gerp进程给过滤掉了。

扩展正则表达式元字符也是5个 + () {} ? |

1、元字符:+

  • 作用: 和 * 号对应,+ 号表示的是1次或者多次

2、元字符:?

  • 作用:表示左边一个字符出现0次或者1次
  • 例如:tom? 表示可以匹配tom或tomm
  • 说明:.?是一个特殊的用法,表示把.的贪婪模式变为非贪婪模式

3、元字符:|

  • 作用:或者的意思,可以用来连接两个正则表达式
  • 例如:a|b 表示a或b,取其中一个

4、元字符:()

  • 作用:表示一个整体,可以通过 \n 来取括号里的内容。
  • 例如:(tom)(bob)(alice)\2 \2表示得就是第二个括号的内容(bob)

5、元字符:{ }

  • 作用:用于规定左边字符出现的次数
  • 例如:
    {0,} 表示左边的字符出现0或者无穷次,等价于 *
    {1,} 表示左边的字符出现1或者无穷次,等价于 +

posted on 2022-06-11 14:16  背对背依靠  阅读(798)  评论(0编辑  收藏  举报