Linux 命令行与 shell 脚本编程大全 (3rd ed)(27):基本的 bash shell 命令 3.5.3

阅读数:11 2019 年 11 月 17 日 15:21

Linux命令行与shell脚本编程大全(3rd ed)(27):基本的bash shell命令 3.5.3

内容简介
这是一本关于 Linux 命令行与 shell 脚本编程的全方位教程,主要包括四大部分:Linux 命令行,shell 脚本编程基础,高级 shell 脚本编程,如何创建实用的 shell 脚本。本书针对 Linux 系统的新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的 shell 脚本。

(过滤输出列表)

由前面的例子可知,默认情况下,ls命令会输出目录下的所有非隐藏文件。有时这个输出会显得过多,当你只需要查看单个少数文件信息时更是如此。

幸而ls命令还支持在命令行中定义过滤器。它会用过滤器来决定应该在输出中显示哪些文件或目录。

这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器:

复制代码
$ ls -l my_script
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$

当用户指定特定文件的名称作为过滤器时,ls命令只会显示该文件的信息。有时你可能不知道要找的那个文件的确切名称。ls命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:

  • 问号(?)代表一个字符;
  • 星号(*)代表零个或多个字符。

问号可用于过滤器字符串中替代任意位置的单个字符。例如:

复制代码
$ ls -l my_scr?pt
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$

其中,过滤器my_scr?pt与目录中的两个文件匹配。类似地,星号可匹配零个或多个字符。

复制代码
$ ls -l my*
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_file
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$

使用星号找到了三个名字以 my 开头的文件。和问号一样,你可以把星号放在过滤器中的任意位置。

复制代码
$ ls -l my_s*t
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$

在过滤器中使用星号和问号被称为文件扩展匹配(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称叫作元字符通配符(metacharacter wildcards)。除了星号和问号之外,还有更多的元字符通配符可用于文件扩展匹配。可以使用中括号。

复制代码
$ ls -l my_scr[ai]pt
-rw-rw-r-- 1 christine christine 0 May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$

在这个例子中,我们使用了中括号以及在特定位置上可能出现的两种字符:ai。中括号表示一个字符位置并给出多个可能的选择。可以像上面的例子那样将待选的字符列出来,也可以指定字符范围,例如字母范围[a - i]

复制代码
$ ls -l f[a-i]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fall
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
$

另外,可以使用感叹号(!)将不需要的内容排除在外。

复制代码
$ ls -l f[!a]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
-rw-rw-r-- 1 christine christine 0 May 21 13:44 full
$

在进行文件搜索时,文件扩展匹配是一个功能强大的特性。它也可以用于ls以外的其他 shell 命令。本章随后的部分会有到更多相关的例子。

评论

发布