根据维基百科,元字符是具有特殊含义的任何字符,例如克拉(^),美元符号($)或星号(*)。
就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 +) |
? | 匹配零个或前一个 |