根據維基百科,元字符是具有特殊含義的任何字符,例如克拉(^),美元符號($)或星號(*)。
就Linux而言,這些元字符數量相當多,其含義因所運行的命令或程序而異。
作為元字符的完全停止(。)
謙虛的句號用於在運行諸如cd , find或sh等命令時捐獻當前位置,但在諸如awk , grep和sed的應用程序中,它用於表示任何字符。
例如,以下命令將查找當前文件夾和下面的所有mp3文件。
找 。 -name * .mp3
如果您在當前工作目錄(pwd)中運行該命令,則假設您將mp3文件保存在主文件夾中的音樂文件夾中,則可能會返回結果。
現在看看這個命令:
ps -ef | grep f..efox
ps命令列出您的計算機上正在運行的所有進程。 grep命令接收輸入行並蒐索模式。
因此,ps -ef命令獲取正在運行的進程的列表並將其提供給grep,其中搜索列表中具有f..efox的任何行。 可以表示任何角色。
如果你有firefox運行,你會得到一個匹配。 同樣,如果您有一個名為fonefox或freefox運行的程序,它們也會返回。
星號作為元字符(*)
星號是更廣為人知的元字符,在搜索模式時用來表示0或更多。
例如:
找 。 -name * .mp3
* .mp3返回以.mp3結尾的任何文件名的匹配項。 同樣,我可以用grep命令使用星號,如下所示:
ps -ef | grep F * efox
值得注意的是,這有點不同,因為星號意味著零或更多,以及尋找Firefox,facefox和fonefox它也可以找到flutefox,ferretfox,甚至只是fefox。
作為元字符的克拉(^)
克拉(^)用於表示一行或一個字符串的開頭。 那麼它是如何使用的?
ls命令用於列出文件夾中的所有文件,如下所示:
LS
如果你想知道文件夾中以“gnome”等特定字符串開頭的所有文件,則可以使用克拉指定該字符串。
例如:
ls | grep ^ gnome
請注意,這只列出了以gnome開頭的文件。 如果你想要在任何地方有文件名的gnome的文件,那麼你會再次回到星號。
在上面的例子中,ls返回一個文件名列表,並將該列表傳遞給grep,用於模式匹配。 grep知道克拉符號意味著找到任何以它後面的字符開頭的東西,在這種情況下,它是一個侏儒。
美元符號作為元字符($)
美元符號在Linux中可以有多種含義作為元字符。
當用來匹配模式時,它意味著與克拉相反並表示任何以特定字符串結尾的模式。
例如:
ls | grep png $
這列出了所有以png結尾的文件。
美元符號也用於訪問bash shell中的環境變量。
例如:
出口狗=莫莉
迴聲$狗
線出口狗= molly創建一個稱為狗的環境變量,並將其值設定為molly。 要訪問環境變量,使用$符號。 使用$符號時,echo $ dog語句顯示為molly,但沒有它,echo dog語句只顯示單詞dog。
轉義元字符
有時你不希望元字符有特殊的含義。 如果你有一個名為f.refox的文件和一個名為firefox的文件,該怎麼辦?
現在看看下面的命令:
ls | grep f.refox
你覺得返回什麼? 因為它們都匹配模式,所以f.refox和firefox都會返回。
要僅返回f.refox,您需要跳出句號來實際表示完整句號,如下所示:
ls | grep f \\ refox
常見的元字符及其含義
字符 | 含義 |
。 | 任何角色 |
* | 零個或多個字符 |
^ | 匹配以模式開始的任何行或字符串(即^ gnome) |
$ | 匹配以模式結尾的任何行或字符串(即gnome $) |
\ | 轉義下一個字符以消除其特殊含義 |
[] | 匹配列表或範圍之一(即[“abc”,“def”]或[1..9] |
+ | 匹配一個或多個在前(即grep a +) |
? | 匹配零個或前一個 |