linux bash命令行常用通配符和特殊符号


通配符与特殊符号

回到顶部

在bash下可以使用通配符(wildcard)匹配各种字符。常用的通配符如下:

bash常用通配符
bash常用通配符
通配符 通配符意义
* 代表0个或任意多个的任意字符
? 代表一个任意字符
[ ] 代表中括号[ ]内出现的任意一个字符。例如[abcd]表示一定有一个字符, 可能是a, b, c, d这四个中的任何一个
[ - ] 括号内[]为减号-,减号两边有字符,表示在字符编码顺序内的任一字符。例如[0-9]代表0到9之间的任一数字,[a-z]代表a到z之间的任一字符
[^ ] 中括号内[ ]的第一个字符为指数符号^, 表示不是中括号内字符的任一字符。例如[^abc]代表一个字符,但是这个字符不可能是a、b或者c。
接下来让我们利用通配符来玩些东西吧!首先,利用通配符配合ls找文件名看看:
列出/etc/目录下以cron开头的文件名:
              #由于与编码有关,先设定语系一下
              [peter@study ~]$ LANG=C
              [peter@study ~]$ ls -ld /etc/cron*
              drwxr-xr-x 2 root root 4096 Jul 16  2019 /etc/cron.d
              drwxr-xr-x 2 root root 4096 Sep 25 12:18 /etc/cron.daily
              drwxr-xr-x 2 root root 4096 Dec 17  2018 /etc/cron.hourly
              drwxr-xr-x 2 root root 4096 Dec 17  2018 /etc/cron.monthly
              -rw-r--r-- 2 root root  722 Nov 16  2017 /etc/crontab
              drwxr-xr-x 2 root root 4096 Dec 17  2018 /etc/cron.weekly
            
-d选项如果是目录仅列出目录本身的信息,不需要列出目录内的文件信息。
列出/etc/目录下文件名刚好是五个字母的文件名:
              [peter@study ~]$ ls -ld /etc/??????
              drwxr-xr-x 4 root root   4096 Jul 10  2019 /etc/apport
              drwxr-xr-x 7 root root   4096 Dec 17  2018 /etc/brltty
              drwxr-xr-x 2 root root   4096 Jul 16  2019 /etc/cron.d
              ...省略...
            
每一个?代表一个任意字符,五个字符就是五个?了。
列出/etc/目录下文件名含有数字的文件名:
              [peter@study ~]$ ls -ld /etc/*[0-9]*
              drwxr-xr-x  4 root root  4096 Dec 17  2018 /etc/dbus-1
              drwxr-xr-x  3 root root  4096 Jul 16  2019 /etc/gnome-vfs-2.0
              drwxr-xr-x  2 root root  4096 Dec 17  2018 /etc/gtk-2.0
              ...省略...
            
列出/etc/目录下, 文件名开头不是a-t的所有文件名:
              [peter@study ~]$ ls -ld /etc/[^a-t]*
            
将上面找到的文件复制到/tmp/upper目录中
              [peter@study ~]$ mkdir /tmp/upper
              [peter@study ~]$ cp -a /etc/[^a-z]* /tmp/upper
            
除了使用通配符, bash环境下还有很多的特殊字符,这些特殊字符具有特定的功能含义。 理论上,文件名尽量不要使用这些特殊字符!常用的特殊字符汇总如下:

bash常用特殊字符
bash常用特殊字符
特殊字符 特殊字符意义
# 注释符号,#后面的任何字符都被bash作为注释说明,没有实际的执行意义,最常用在shell script中
\ 转义字符,将特殊字符或通配符还原成一般字符
| 管道线(pipe),连接两个管道命令。管道线前面命令的输出作为管道线后面命令的输入
; 连续命令分隔符,连接两个按先后顺序连续执行的命令。分割符前后的两个命令可以没有任何关系。但是一定是按照顺序执行。
$ 变量前导符,取变量的值
& 作业控制命令(job control),将命令变成bash后台作业
! 逻辑运算意义上的非 not 的意思!
/ 路径分隔符,相对路径或绝对路径父子目录或文件的分割符
>, >> 数据流输出重定向符号,>为覆盖输出,>>为追加输出
<, << 数据流输入重定向符号,分别为覆盖输入和追加输入
' ' 单引号,单引号内的字符均为普通字符,即使是特殊字符也失去了特殊功能,例如$失去取变量的功能含义,变为普通字符
" " 双引号,双引号内的特殊字符具有特殊功能,例如$仍然保留取变量值的功能。
` ` 反单引号`内为可优先执行的命令,意义类似$( )
( ) 在()中间为子shell 的起始与结束
{ } 在{}中间为命令区块的组合!

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读