2.2 用 cat 进行拼接

cat是命令行玩家首先必须学习的命令之一。它通常用于读取、显示或拼接文件内容,不过cat的能力远不止如此。用一行命令将来自标准输入以及文件的数据给组合起来,这可是个让人挠头的难题。通常的做法是将stdin重定向到一个文件,然后再将两个文件组合到一起。不过我们可以使用cat命令一次性搞定。接下来你会看到cat的基本用法和高级用法。

2.2.1 实战演练

cat命令是一个平日里经常会使用到的简单命令。它本身表示concatenate(拼接)。

cat读取文件内容的一般写法是:

$ cat file1 file2 file3 ...

这个命令将作为命令行参数的文件内容拼接在一起。

  • 打印单个文件的内容:

    $ cat file.txt
    This is a line inside file.txt
    This is the second line inside file.txt
    
  • 打印多个文件的内容:

    $ cat one.txt two.txt
    This is line from one.txt
    This is line from two.txt
    

2.2.2 工作原理

cat的用法多种多样。让我们来看看其中的一些。

cat命令不仅可以读取文件、拼接数据,还能够从标准输入中进行读取。

从标准输入中读取需要使用管道操作符:

OUTPUT_FROM_SOME COMMANDS | cat

类似地,我们可以用cat将来自输入文件的内容与标准输入拼接在一起,将stdin和另一个文件中的数据结合起来。方法如下:

$ echo 'Text through stdin' | cat - file.txt

在上面的代码中,-被作为stdin文本的文件名。

2.2.3 补充内容

cat命令还有一些用于文件查看的选项。来看看它们的用法。

  1. 摆脱多余的空白行

    有时候文本文件中可能包含多处连续的空白行。如果你需要删除这些额外的空白行,使用下面的方法:

    $ cat -s file
    

    例如:

    $ cat multi_blanks.txt
    line 1
     
     
    line2
     
    line3
     
     
    line4
     
    $ cat -s multi_blanks.txt #压缩相邻的空白行
    line 1
     
    line2
     
    line3
     
    line4
    

    另外,也可以用tr删除所有的z空白行,我们会在2.6节详细讨论。

  2. 将制表符显示为^|

    单从视觉上很难将制表符同连续的空格区分开。而在用Python编写程序时,用于代码缩进的制表符以及空格是具有特殊含义的。因此,若在应该使用空格的地方误用了制表符的话,就会产生缩进错误。仅仅在文本编辑器中进行观察是很难发现这种错误的。cat有一个特性,可以将制表符着重标记出来。该特性对排除缩进错误非常有用。用cat命令的-T选项能够将制表符标记成^|。例如:

    $ cat file.py
    def function():
        var = 5
            next = 6
        third = 7
     
    $ cat -T file.py
    def function():
    ^Ivar = 5
            next = 6
    ^Ithird = 7^I
    
  3. 行号

    使用cat命令的-n选项会在输出的每一行内容之前加上行号。别担心,cat命令绝不会修改你的文件,它只是根据用户提供的选项在stdout中生成一个修改过的输出而已。例如:

    $ cat lines.txt
    line
    line
    line
     
    $ cat -n lines.txt
         1 line
         2 line
         3 line
    

-n甚至会为空白行加上行号。如果你想跳过空白行,那么可以使用选项-b