1. 程式人生 > >Linux中的萬用字元和正則表示式

Linux中的萬用字元和正則表示式

在linux中,有萬用字元和正則表示式,這是兩個不同的概念

萬用字元:它是由shell解析,並且一般用於匹配檔名。如:ls

正則表示式:是一個字元匹配標準,可以匹配文字中的內容
一些命令工具按此標準實現字元匹配,常用於支援正則表示式的工具,如grep,sed等。一般用於匹配檔案中的內容。

常用的萬用字元

*:匹配任意多個字元
?:匹配任意一個字元
[…]:匹配中括號內出現的任意一個字元
[!..]:不匹配中括號內出現的任意一個字元

練習實驗過程:
1、建立一些檔案

[[email protected] tmp]# touch 1{1,2,3}
[[email protected]
tmp]# touch b{1,2,3} [[email protected] tmp]# touch a{1,2,3}a [[email protected] tmp]# touch b{1,2,3}b [[email protected] 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開頭的後面任意
[[email protected] 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開頭的,後面一個字元
[
[email protected]
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開頭的檔案,測試檢視

[[email protected] 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

[[email protected] 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、直接輸出* ?和[],需要使用轉移字元""

[[email protected] 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]