Linux Shell 萬用字元、逸出字元、元字元、特殊字元,shell轉義

來源:互聯網
上載者:User

Linux Shell 萬用字元、逸出字元、元字元、特殊字元,shell轉義
一、linux shell萬用字元(wildcard)

萬用字元是由shell處理的(不是由所涉及到命令語句處理的,其實我們在shell各個命令中也沒有發現有這些萬用字元介紹), 它只會出現在命令的“參數”裡(它不用在命令名稱裡,也不用在操作符上)。當shell在“參數”中遇到了萬用字元時,shell會將其當作路徑或檔案名稱去在磁碟上搜尋可能的匹配:若符合要求的匹配存在,則進行替換(路徑擴充);否則就將該萬用字元作為一個一般字元傳遞給“命令”,然後再由命令進行處理。

總之,萬用字元實際上就是一種shell實現的路徑擴充功能。在萬用字元被處理後, shell會先完成該命令的重組,然後再繼續處理重組後的命令,直至執行該命令。

例如以下命令:
[root@localhost wildcard]# lsa.htm  b.htm[root@localhost wildcard]# ls *.htma.htm  b.htm[root@localhost wildcard]# ls d*.htmls: d*.htm: 沒有那個檔案或目錄

分析如下:

第2個命令中,對於參數*.htm,shell在目前的目錄下能搜尋到相匹配檔案,會換成a.htm b.htm。實際執行的是ls a.htm b.htm命令。

第3個命令,對於參數d*.htm, shell在目前的目錄找不到相匹配的檔案,則直接將d*.htm作為ls參數,實際執行的是ls d*.htm。由於找不到該檔案,所以會出現:沒有那個檔案或目錄。

瞭解了shell萬用字元,我們現在看下,shell常見萬用字元有那一些了。

shell萬用字元
字元 含義 執行個體
 *  匹配0或多個字元  a*b  a與b之間可以有任意長度的任一字元, 也可以一個也沒有, 如aabcb, a01b, ab等
 ?  匹配任意一個字元  a?b  a與b之間有且只有一個字元, 可以是任一字元, 如aab, adb, a0b等
 [list]  匹配list中的任意單一字元  a[xyz]b  a與b之間有且只有一個字元, 且只能是x或y或z, 如: axb, ayb, azb。
 [!list]  匹配除list中的任意單一字元  a[!0-9]b  a與b之間有且只有一個字元, 但不能是數字, 如axb, aab, a-b等
 [c1-c2]  匹配c1-c2中的任意單一字元  a[0-9]b  a與b之間有且只有一個字元,該字元是0-9之間的數字,如a0b, a1b,... ,a9b。
 {string1,string2,...}  匹配 sring1 或 string2 (或更多)其一字串  a{abc,xyz,123}b    a與b之間只能是abc或xyz或123這三個字串之一。








需要說明的是:萬用字元看起來有點象Regex語句,但是它與Regex不同的,不能相互混淆。把萬用字元理解為shell特殊代號字元就可。


二、shell元字元

shell除了有萬用字元之外,由shell負責預先先解析後,將處理結果傳給命令列之外,shell還有一系列自己的其他特殊字元。

shell元字元
字元 說明
 =  變數名=值,為變數賦值。注意=左右緊跟變數名和值,中間不要有空格
 $  變數值替換,$變數名替換為shell變數的值;為避免在文本串連時混淆,請使用${變數名};$0...$9 代表shell檔案的參數。
 >  prog > file 將標準輸出重新導向到檔案。
 >>  prog >> file 將標準輸出追加到檔案。
 <  prog < file 從檔案file中擷取標準輸入
 |  管道命令,例:p1 | p2 將p1的標準輸出作為p2的標準輸入
 &  後台運行命令,最大好處是無需等待命令執行結束,就可以在同一命令列下繼續輸入命令
 ()  在子shell中執行命令
 {}  在當前shell中執行命令,或用在變數替換的界定範圍(例如上面的${變數名}用法)。
 ;  命令結束符。例如p1;p2表示先執行p1,再執行p2
 &&  前一個命令執行成功後,才繼續執行下一個命令。例:p1 && p2 ;若p1執行成功後,才執行p2,反之,不執行p2;
 ||  前一個命令執行失敗後,才繼續執行下一個命令。例:p1 || p2 ;若p1執行成功後,不執行p2,反之,才執行p2;
 !  執行記錄中的命令
 ~  home目錄



三、shell轉義符有時候,我們想讓萬用字元,或者元字元變成一般字元。那麼這裡我們就需要用到轉義符了。 shell提供轉義符有三種。

shell逸出字元
字元 說明
 ''  單引號,硬轉義,其內部所有的shell元字元、萬用字元都會被關掉。注意,硬轉義中不允許出現’(單引號)。
 ""  雙引號,軟轉義,其內部只允許出現特定的shell元字元($,`,\):$用於變數值替換、`用於命令替換、\用於轉義單個字元
 \  反斜線,轉義,去除其後緊跟的元字元或萬用字元的特殊意義。


linux下怎區分萬用字元*與元字元*

用逸出字元\
 
linux shell sed命令與逸出字元

不需要轉義,可以更改定界符。
例如:
A=“2013/06/09“sed “s#hello#$A#"
將定界符改為#就可以了。

望採納,謝謝支援!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.