linux中通配符的初步认识

前言:

  之前学过php下的正则表达式,有一点突发的感觉,这几天在做题的时候发现Linux也有类似的用法,不同的是在Linux中是用在命令执行方面的,关于命令执行,等学的差不多了,过段时间就记录一下。今天主要是记录Linux的命令通配符以及经常与通配符连用的特殊字符。

正文:

  这里还得废话一波,省的以后忘记。Linux的通配符指的就是shell的内置功能,指可以代替Linux命令的特殊字符的总称,例如下面这些

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|     #管道符,或者(正则)
> #输出重定向
>> #输出追加重定向
< #输入重定向
<< #追加输入重定向
~ #当前用户目录
`` #将中间的内容当作命令执行
$() #引用命令被执行后的结果
$ #以。。。结尾(正则)
^ #以。。。开头(正则)
* #匹配全部字符,通配符
? #任意一个字符,通配符
# #注释
& #让程序或脚本切换到后台执行
&& #并且 同时成立
[] #表示一个范围(正则,通配符)
{} #产生一个序列(通配符)
. #当前目录的硬链接
.. #上级目录的硬链接

  这些通配符可以用来匹配字符串,命令或者文件名。在DOS,经常利用这些命令查询多个同类型文件或执行多条命令。关于*、?、[]、{}等等一系列正则表达式的用法这里不做过多解释,详细可以参考这个记录

这里放几张图展示一下:

命令通配符:

  1. *匹配所有字符P1
  2. ?匹配任意一个字符P2
  3. [字符串]匹配被包含的任意一个字符P3
  4. {}生成序列文件P4

具体说明一下命令特殊符号的用法:

命令特殊符号:

  1. |:这个符号叫做管道符可以同时执行多个命令,作用如下:P5

    可以看到管道符先执行了touch命令,然后再ls命令。在同一命令行,管道符可以执行多个命令。

  2. >、>>、<、<<:这几个符号叫重定向符号,不同的前两个是输出重定向,后两个是输入重定向。P6

    可以看出来,输出重定向符将原文中的内容清空了,然后可以存入我们输入的内容,且抛弃最后一条。

    P7

    可以看出,输出追加重定向符并没有清空原文的内容,而是在其后面输入追加的内容,且抛弃最后一条。

    P8

    可以看到,输入重定向符将原文内容直接打印出来,因为每次测试的时候都只在目标文件里留下这一个字符串,所以看到的效果就只有一个字符串,这个说明输入重定向符将文件内容从头到尾打印出来。

    P9

    测试结果:之后的分界符可以自由定义,只要再碰到相同的分界符,两个分界符之间的内容将作为命令的输入(不包括分界符本身)。

      这里的输入输出指的是命令行的输入输出,比如>对命令行来说是输出,对于文件来说就是输入,所可以看到在命令行的内容就会输入文件内部。上面举例的这些是默认的标准输入输出重定向,也就是默认重定向,除了这些基本用法之外,重定向符还可以控制其他不同的数据流模式:

    • 标准输入;代码为 0 ;或称为 stdin ;使用的方式为 命令 <文本;将显示的结果输出到文件中,若该文件以存在则予以取代!
    • 标准输出:代码为 1 ;或称为 stdout;使用的方式为 命令 1>文本;将显示的数据,正确的输出到 文本。
    • 错误输出:代码为 2 ;或称为 stderr;使用的方式为 命令 2>文本;将显示的数据,错误的输出到文本。

      重定向符还可以和&符号连用,比如1>&2表示标准输出定向到标准错误,所以可以在标准错误的数据流中找到标准输出内容,用法举例:命令 2>文本 1>&2,同理:2>&1表示标准错误重定向到标准输出,等等多种组合。举一反三的事情值得实践。

  3. ~表示当前用户,就是home目录,也就是用户权限目录。这里不暴露我电脑的个人信息,不做图像演示,点到为止。

  4. `、$()`可以将放入其中的字符串当作命令执行P10

    可以看出,三条命令执行的结果都是一样的,前两步就是先执行which cat命令,第一次的执行结果就是第三步命令,然后再执行第三步命令。

这些就是从各路神仙的学习笔记中挑出来我认为常见的通配符和命令特殊符的使用,如果有哪里不对,可以请大佬们指点一下吗?批评通道:

P11