什么是 Linux 元字符?你需要知道的一切
通过了解有关 Linux 元字符和通配符的更多信息来提高命令行效率。
Linux Bash shell 最强大的功能是它能够有效地处理文件并重定向其输入和输出。 Linux 使用称为元字符的特殊字符或符号,为 shell 命令添加有关文件搜索和命令连接的特殊含义。
元字符有助于在 Linux 上列出、删除和复制文件。但是,每个元字符的功能会有所不同,具体取决于您使用它的命令。
本文提供了有关 Linux 中不同类型元字符的深入指南。最后,我们解释这些特殊字符如何帮助连接和扩展命令。
文件匹配元字符
Linux shell 允许您在输入命令时通过在文件或目录名称之间使用元字符来保存击键。这些字符可帮助您引用一组文件或目录来列出、移动或执行其他活动。
这些是 Linux shell 可以解释的一些文件匹配元字符:
*(星号):匹配单个或多个出现的字符
? (问号):匹配单个字符或模式出现
[ ](方括号):匹配方括号内指定的任何用连字符分隔的数字、符号或字母
在 Linux 中练习元字符的理想方法是在 /tmp 目录中创建一个新的空文件夹。
sudo mkdir /tmp/meta
现在使用 cd 命令导航到 /tmp/meta 目录,并使用 touch 创建新的空文件,如下所示:
touch apple.txt cider.sh vinegar.php cat.txt lemon.txt juice.sh catfish.sh
使用以下命令测试“*”元字符并显示输出:
ls c*
Output:
catfish.sh cat.txt cider.sh
ls c*h
Output:
catfish.sh cider.sh
ls *r*
Output:
cider.sh vinegar.php
sudo rm *p*
上述命令将删除名称中包含字母“p”的所有文件。您可以使用 ls 命令验证更改,如下所示:
ls
Output:
catfish.sh cat.txt cider.sh juice.sh lemon.txt
以下是用于模式匹配的“?”元字符的一些示例:
ls a?*
Output:
apple.txt
ls c?t*
Output:
catfish.sh cat.txt
最后一个命令匹配以 c 开头且第三个字母为 t 的任何文件(cat.txt、catfish.sh 等)。
现在,将 [av]* 选项与 ls 命令结合使用,列出以 a 或 v 开头的所有文件,如下所示:
ls [av]*
Output:
apple.txt vinegar.sh
您可以修改上述命令以仅列出以字母 t 结尾的文件:
ls [ac]*[t]
Output:
apple.txt catfish.txt cat.txt
同样,您可以使用连字符分隔字母来定义范围并列出文件,如下所示:
ls [a-j]*
Output:
apple.txt catfish.sh cat.txt cider.sh juice.sh
文件重定向元字符
为了更好地理解 Bash 中的重定向,Linux 中的每个进程都有文件描述符,称为标准输入 (stdin/0)、标准输出 (stdout/1) 和标准错误(stderr/2)。它们确定命令输入的来源并决定将输出和错误消息发送到何处。
重定向元字符可帮助您通过重定向内容 I/O 流来修改这些操作。通常,Linux shell 读取从键盘输入的命令并将输出写入屏幕。输入重定向允许命令从文件而不是键盘读取内容,而输出重定向将命令输出保存到文件中。
换句话说,Linux 文件重定向元字符允许您将内容重定向到 (>) 文件和从 (<) 文件重定向内容。三个主要的重定向元字符是:
<:将文件内容定向到命令。例如,less .bashrc 的命令输出与 less < .bashrc 相同。
>:将命令输出定向到文件。命令ls /etc >lists.txt将输出保存到lists.txt文件中。
>>:将命令输出附加到文件内容。
wc 代表字数统计,您可以使用它来显示文件在附加输出之前和之后之间的差异。
大括号扩展元字符
大括号扩展元字符允许您跨目录、文件名或其他命令行参数扩展字符。例如,您可以在 /tmp 文件夹中创建一个新目录 brace ,并使用 touch 命令创建一组文件,如下所示:
sudo mkdir /tmp/brace; cd /tmp/brace
touch test{1,2,3,4,5}
现在,您可以使用 ls 命令检查 touch 是否创建了文件。
ls
Output:
test1 test2 test3 test4 test5
您可以指定多个列表,以根据列表中元素的组合生成文件名。例如:
touch {apple,cider,vinegar}.{fruit,liquid,sour}
touch {a,b,c}.{1,2,3}
最后一条命令将在当前目录中创建以下文件:
第一个命令使用两组大括号将每组中的文件名与另一组中的文件名关联起来。您还可以将最后一个命令编写为 touch {a..c}.{1..3} 来指定 a 和 c 以及 1 和 3 之间的范围。
除了创建文件之外,您还可以使用大括号扩展来删除文件或将文件复制到其他位置。
其他一些 Linux 元字符
下面的表格列出了一些用于命令连接和扩展的必须知道的元字符及其名称、描述和练习示例:
Name | Description | Example |
---|---|---|
Pipe (|) | Connects command output as an input to the other command. | cat /etc/passwd | grep root |
Semicolon (;) | Allows execution of sequential commands, one after the other. | cd /etc ; ls -la ; chmod +x /tmp/script.php |
Ampersand (&) | Runs the processes or commands in the background. | find / -perm -u=s -type f & |
Dollar ($) | Expands the arithmetic expression and passes it to the shell | echo "total files in this directory are: $(ls | wc -l)" |
Null Redirection (2>) | Directs standard error messages to the /dev/null file | your_command 2>/dev/null |
Circumflex (^) | Matches any pattern that begins with the expression followed by ^ | cd /etc/ssh ; ls | grep ^s |
使用 Linux 元字符保存您的击键
Linux 元字符也称为通配符,它为命令添加特殊含义并控制其行为。元字符可优化用户在高效环境中的工作表现,同时处理文件/目录以及连接/扩展 Linux shell 命令。
此外,元字符也是正则表达式的构建块。此外,如果您想成为一名 Linux 专业用户,那么了解元字符及其用法是一项重要技能。