2.2 用cat进行拼接

cat是命令行玩家首先必须学习的命令之一。cat命令简约却不失优美。它通常用于读取、显示或拼接文件内容,不过cat所具备的能力远不止这些。

2.2.1 预备知识

用一个单行命令组合标准输入的数据与文件数据,这可是个让人挠头的难题。通常的解决方法是将stdin重定向到一个文件,然后再将两个文件拼接到一起。但是我们可以使用cat命令一次性完成任务。

2.2.2 实战演练

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

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

  1. $ cat file1 file2 file3 ...

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

  1. $ cat file.txt
  2. This is a line inside file.txt
  3. This is the second line inside file.txt

2.2.3 工作原理

cat包含了大量功能。让我们来看一些cat的用法。

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

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

  1. OUTPUT_FROM_SOME COMMANDS | cat

类似地,我们可以用cat将输入文件的内容与标准输入拼接在一起。方法如下:

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

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

2.2.4 补充内容

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

  • 压缩空白行

出于可读性或是别的一些原因,有时文本中的多个空行需要被压缩成单个。可以用下面的方法压缩文本文件中连续的空白行:

  1. $ cat -s file

例如:

  1. $ cat multi_blanks.txt
  2. line 1
  3.  
  4.  
  5. line2
  6.  
  7. line3
  8.  
  9. line4
  10.  
  11. $ cat -s multi_blanks.txt # 压缩连续的空白行
  12. line 1
  13.  
  14. line2
  15.  
  16. line3
  17.  
  18. line4

我们也可以用tr移除空白行:

  1. $ cat multi_blanks.txt | tr -s '\n'
  2. line 1
  3. line2
  4. line3
  5. line4

tr的这种用法中,它将连续多个'\n'字符压缩成单个'\n'(换行符)。

  • 将制表符显示为 ^|

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

  1. $ cat file.py
  2. def function():
  3. var = 5
  4. next = 6
  5. third = 7
  6.  
  7. $ cat -T file.py
  8. def function():
  9. ^Ivar = 5
  10. next = 6
  11. ^Ithird = 7^I
  • 行号

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

  1. $ cat lines.txt
  2. line
  3. line
  4. line
  5.  
  6. $ cat -n lines.txt
  7. 1 line
  8. 2 line
  9. 3 line