Linux中的通配符和正则表达式

在linux中,有通配符和正则表达式,这是两个不同的概念

通配符:它是由shell解析,并且一般用于匹配文件名。如:ls

正则表达式:是一个字符匹配标准,可以匹配文本中的内容
一些命令工具按此标准实现字符匹配,常用于支持正则表达式的工具,如grep,sed等。一般用于匹配文件中的内容。

常用的通配符

*:匹配任意多个字符
?:匹配任意一个字符
[…]:匹配中括号内出现的任意一个字符
[!..]:不匹配中括号内出现的任意一个字符

练习实验过程:
1、创建一些文件

[root@localhost tmp]# touch 1{1,2,3}
[root@localhost tmp]# touch b{1,2,3}
[root@localhost tmp]# touch a{1,2,3}a
[root@localhost tmp]# touch b{1,2,3}b
[root@localhost tmp]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 16 14:29 a1
-rw-r--r--. 1 root root 0 Dec 16 14:29 a1a
-rw-r--r--. 1 root root 0 Dec 16 14:29 a2
-rw-r--r--. 1 root root 0 Dec 16 14:29 a2a
-rw-r--r--. 1 root root 0 Dec 16 14:29 a3
-rw-r--r--. 1 root root 0 Dec 16 14:29 a3a
-rw-r--r--. 1 root root 0 Dec 16 14:29 b1
-rw-r--r--. 1 root root 0 Dec 16 14:30 b1b
-rw-r--r--. 1 root root 0 Dec 16 14:29 b2
-rw-r--r--. 1 root root 0 Dec 16 14:30 b2b
-rw-r--r--. 1 root root 0 Dec 16 14:29 b3
-rw-r--r--. 1 root root 0 Dec 16 14:30 b3b

2、使用通配符“*”和“?”显示a开头的文件,测试查看

a开头的后面任意
[root@localhost tmp]# ll a*
-rw-r--r--. 1 root root 0 Dec 16 14:29 a1
-rw-r--r--. 1 root root 0 Dec 16 14:29 a1a
-rw-r--r--. 1 root root 0 Dec 16 14:29 a2
-rw-r--r--. 1 root root 0 Dec 16 14:29 a2a
-rw-r--r--. 1 root root 0 Dec 16 14:29 a3
-rw-r--r--. 1 root root 0 Dec 16 14:29 a3a

a开头的,后面一个字符
[root@localhost tmp]# ll a?
-rw-r--r--. 1 root root 0 Dec 16 14:29 a1
-rw-r--r--. 1 root root 0 Dec 16 14:29 a2
-rw-r--r--. 1 root root 0 Dec 16 14:29 a3

3、测试通配符“[…]”和“[!..]”显示a开头的文件,测试查看

[root@localhost tmp]# ll [a]*
-rw-r--r--. 1 root root 0 Dec 16 14:29 a1
-rw-r--r--. 1 root root 0 Dec 16 14:29 a1a
-rw-r--r--. 1 root root 0 Dec 16 14:29 a2
-rw-r--r--. 1 root root 0 Dec 16 14:29 a2a
-rw-r--r--. 1 root root 0 Dec 16 14:29 a3
-rw-r--r--. 1 root root 0 Dec 16 14:29 a3a

[root@localhost tmp]# ll [!a]*
-rw-r--r--. 1 root root 0 Dec 16 14:29 b1
-rw-r--r--. 1 root root 0 Dec 16 14:30 b1b
-rw-r--r--. 1 root root 0 Dec 16 14:29 b2
-rw-r--r--. 1 root root 0 Dec 16 14:30 b2b
-rw-r--r--. 1 root root 0 Dec 16 14:29 b3
-rw-r--r--. 1 root root 0 Dec 16 14:30 b3b

4、直接输出* ?和[],需要使用转移字符""

[root@localhost tmp]# echo \*?[]
*?[]

正则表达式

字符匹配

.:匹配任意单个字符
*:匹配其前面一个字符出现任意次
?:匹配其前面的字符1次或0次
+:匹配其前面一个字符出现至少一次(在扩展正则表达式中)

位置匹配

^:锚定行首
$:锚定行尾
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词尾部出现
\B:非单词的开头或结尾
^$:空白行
\ :通常用于打开或关闭后续字符的特殊含义

分组()

(ab)* : 匹配ab这个分组出现任意次
\1:引用第一个左边以及与之对应的右边所包括的所有内容,同理还有\2,\3

特殊子字符类

[:alnum:] :任何字母和数字
[:alpha:] :任何字母
[:cntrl:] :控制字符. 在ASCII表中对应八进制000 到 037, 和177 ('DEL').
[:digit:] :任何数字
[:graph:] :匹配打印字符,相当于'[:alnum:]' +'[:punct:]'.
[:lower:] :小写字母
[:print:] :可打印字符,相当于 '[:alnum:]', '[:punct:]', 和space.
[:punct:] :标点符号,'! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ' { | } ~'
[:space:] :空白字符,tab, newline, vertical tab, form feed, carriage return, and space.
[:upper:] :大写字母
[:xdigit:] :任何16进制的数字,相当于[0-9a-fA-F]

猜你喜欢

转载自blog.csdn.net/u010599211/article/details/85037006