shell中的萬用字元

2021-12-29 16:25:57 字數 3194 閱讀 7062

為了清理一些日誌檔案,這些檔案有部分特徵,通過使用shell萬用字元可以匹配到,當然正則也可以,而且更強大。這裡先說shell的萬用字元

shell支援的萬用字元

shell支援一組萬用字元用於處理資料,但是要和正規表示式區別開來。shell的萬用字元實現的功能比較簡單,常用於檔名匹配,遠不及正規表示式強大和廣泛。不過對於日常使用linux還是有非常大的幫助的。下表取自《鳥哥的linux私房菜》

符號意義 *

代表『 0 個到無窮多個』任意字元

? 代表『一定有乙個』任意字元

[ ]同樣代表『一定有乙個在括號內』的字元(非任意字元)。例如 [abcd] 代表『一定有乙個字元, 可能是 a, b, c, d 這四個任何乙個』

[ - ]

若有減號在中括號內時,代表『在編碼順序內的所有字元』。例如 [0-9] 代表 0 到 9 之間的所有數字,因為數字的語系編碼是連續的!

[^ ]

若中括號內的第乙個字元為指數符號 (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有乙個字元,只要是非 a, b, c 的其他字元就接受的意思。

2. shell中的特殊字元(以bash為例)

萬用字元常用於檔名匹配,而特殊字元的則協助shell完成各種具體工作。下表取自《鳥哥的linux私房菜》

符號內容 #

批註符號:這個最常被使用在 script 當中,視為說明!在後的資料均不執行

\ 跳脫符號:將『特殊字元或萬用字元』還原成一般字元

| 管道 (pipe):分隔兩個管線命令的界定(後兩節介紹);

; 連續命令下達分隔符:連續性命令的界定 (注意!與管線命令並不相同)

~ 使用者的家目錄

$ 取用變數前導符:亦即是變數之前需要加的變數取代值

& 工作控制 (job control):將命令變成背景下工作

! 邏輯運算意義上的『非』 not 的意思!

/ 目錄符號:路徑分隔的符號

>, >>

資料流重導向:輸出導向,分別是『取代』與『累加』

資料流重導向:輸入導向 (這兩個留待下節介紹)

』 『單引號,不具有變數置換的功能

" "具有變數置換的功能!

` `兩個『 ` 』中間為可以先執行的命令,亦可使用 $( )

( )在中間為子 shell 的起始與結束

在中間為命令區塊的組合!

3.下面寫個很簡單的指令碼來生成一些檔案

#!/bash/bin

for((i=1;i<=10;i++))

do x=2017_7_$i.log

touch $x

done

#執行下指令碼看看

[root@vm_157_218_centos test_shell_dir]# ls

2017_7_1.log 2017_7_2.log 2017_7_4.log 2017_7_6.log 2017_7_8.log

2017_7_10.log 2017_7_3.log 2017_7_5.log 2017_7_7.log 2017_7_9.log test.sh

#成功生成了。

1) *號的使用

[root@vm_157_218_centos test_shell_dir]# touch 2017_6 #新建乙個相似檔案

[root@vm_157_218_centos test_shell_dir]# ls 2017*6* #這樣的就匹配到了

2017_6 2017_7_6.log

2) ?號的使用

[root@vm_157_218_centos test_shell_dir]# ls #生成類似檔案

2017_7_1.log 2017_7_3.log 2017_7_6.log 2017_7_9.log 2017_8_2.log 2017_8_5.log 2017_8_8.log 2017_7_10.log 2017_7_4.log 2017_7_7.log 2017_8_1.log 2017_8_3.log 2017_8_6.log 2017_8_9.log 2017_7_2.log 2017_7_5.log 2017_7_8.log 2017_8_10.log 2017_8_4.log 2017_8_7.log

#現在我想找每個月九號的日誌檔案,可以這樣。

[root@vm_157_218_centos test_shell_dir]# ls 2017_?_9*

2017_7_9.log 2017_8_9.log

3) 的使用

[root@vm_157_218_centos test_shell_dir]# ls

2017_8_1.log 2017_8_2.log 2017_8_4.log 2017_8_6.log 2017_8_8.log

2017_8_10.log 2017_8_3.log 2017_8_5.log 2017_8_7.log 2017_8_9.log test.sh

#現在我要把8月7號之前的日誌刪了。

[root@vm_157_218_centos test_shell_dir]# rm -f 2017_8_[123456]*

[root@vm_157_218_centos test_shell_dir]# ls

2017_8_7.log 2017_8_8.log 2017_8_9.log test.sh

4) [^]號的使用

#現在我把除今天以外的所有日誌刪除,那麼可以

[root@vm_157_218_centos test_shell_dir]# sh creat_log_file.sh

[root@vm_157_218_centos test_shell_dir]# ls

2017_8_1.log 2017_8_2.log 2017_8_4.log 2017_8_6.log 2017_8_8.log

2017_8_10.log 2017_8_3.log 2017_8_5.log 2017_8_7.log 2017_8_9.log test.sh

[root@vm_157_218_centos test_shell_dir]# rm -f 2017_8_[^9]*

[root@vm_157_218_centos test_shell_dir]# ls

2017_8_9.log test.sh

shell中的萬用字元

shell支援的萬用字元 shell支援一組萬用字元用於處理資料,但是要和正規表示式區別開來。shell的萬用字元實現的功能比較簡單,常用於檔名匹配,遠不及正規表示式強大和廣泛。不過對於日常使用linux還是有非常大的幫助的。下表取自 鳥哥的linux私房菜 符號意義 代表 0 個到無窮多個 任意字...

Shell中的萬用字元

在 bash 中,如果需要模糊匹配檔名或目錄名,就要用到萬用字元。下面為常用的萬用字元。萬用字元說明 匹配0或任意個字元 匹配乙個任意字元 匹配中括號的字元。例如 a b 匹配小寫字母,只會匹配集合中的乙個 匹配除了中括號的乙個字元。例如 0 9 匹配除了數字的字元,只會匹配集合中的乙個 匹配其中乙...

Shell中的萬用字元

shell常見的萬用字元,注意與正則稍有不同 字元含義例項 匹配0個或多個任意字元 a b,a與b之間可以有任意長度的字元,也可以沒有。例如 aabcb,ab,azxcb.匹配乙個任意字元 a?b,a與b之間必須但也只能存在乙個字元,該字元可以是任意字元。例如 aab,abb,acb.list 匹配...