bash的通配符與特殊符號


在 bash 的操作環境中還有一個非常有用的功能,那就是通配符 (wildcard) ! 我們利用 bash 處理數據就更方便了!底下我們列出一些常用的通配符喔:

符號 意義
* 代表『 0 個到無窮多個』任意字符
? 代表『一定有一個』任意字符
[ ] 同樣代表『一定有一個在括號內』的字符(非任意字符)。例如 [abcd] 代表『一定有一個字符, 可能是 a, b, c, d 這四個任何一個』
[ - ] 若有減號在中括號內時,代表『在編碼順序內的所有字符』。例如 [0-9] 代表 0 到 9 之間的所有數字,因為數字的語系編碼是連續的!
[^ ] 若中括號內的第一個字符為指數符號 (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有一個字符,只要是非 a, b, c 的其他字符就接受的意思。

接下來讓我們利用通配符來玩些東西吧!首先,利用通配符配合 ls 找檔名看看:

[root@www ~]# LANG=C              <==由於與編碼有關,先配置語系一下

范例一:找出 /etc/ 底下以 cron 為開頭的檔名
[root@www ~]# ll -d /etc/cron*    <==加上 -d 是為了僅顯示目錄而已

范例二:找出 /etc/ 底下文件名『剛好是五個字母』的文件名
[root@www ~]# ll -d /etc/?????    <==由於 ? 一定有一個,所以五個 ? 就對了

范例三:找出 /etc/ 底下文件名含有數字的文件名
[root@www ~]# ll -d /etc/*[0-9]*  <==記得中括號左右兩邊均需 *

范例四:找出 /etc/ 底下,檔名開頭非為小寫字母的文件名:
[root@www ~]# ll -d /etc/[^a-z]*  <==注意中括號左邊沒有 *

范例五:將范例四找到的文件復制到 /tmp 中
[root@www ~]# cp -a /etc/[^a-z]* /tmp

 

除了通配符之外,bash 環境中的特殊符號有哪些呢?底下我們先匯整一下:

符號 內容
# 批注符號:這個最常被使用在 script 當中,視為說明!在后的數據均不運行
\ 跳脫符號:將『特殊字符或通配符』還原成一般字符
| 管線 (pipe):分隔兩個管線命令的界定(后兩節介紹);
; 連續命令下達分隔符:連續性命令的界定 (注意!與管線命令並不相同)
~ 用戶的家目錄
$ 取用變量前導符:亦即是變量之前需要加的變量取代值
& 工作控制 (job control):將命令變成背景下工作
! 邏輯運算意義上的『非』 not 的意思!
/ 目錄符號:路徑分隔的符號
>, >> 數據流重導向:輸出導向,分別是『取代』與『累加』
<, << 數據流重導向:輸入導向 (這兩個留待下節介紹)
' ' 單引號,不具有變量置換的功能
" " 具有變量置換的功能!
` ` 兩個『 ` 』中間為可以先運行的命令,亦可使用 $( )
( ) 在中間為子 shell 的起始與結束
{ } 在中間為命令區塊的組合!

以上為 bash 環境中常見的特殊符號匯整!理論上,你的『檔名』盡量不要使用到上述的字符啦!

 

轉自 http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_4.php#settings_wildcard


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM