Linux 下的 cat 命令及示例

2025年3月17日 | 阅读 7 分钟

'cat' 命令是最通用、最强大的工具。它被认为是用户最常使用的命令之一。它可以用来显示文件内容、将内容从一个文件复制到另一个文件、合并多个文件的内容、显示行号、在行末显示 $ 符号等。

cat 可以被描述为一个标准的 Unix 工具,它顺序读取文件,并将它们写入标准输出。这个名字来源于合并文件的功能。它已经被移植到多个操作系统。这个命令用于合并文件,包括将多个文件合并到一个文件中。

cat 命令的用法

Single Unix Specification 描述了 cat 命令的操作,即按照参数中提供的顺序读取文件,并按照相同的顺序将它们的内容输出到标准输出。该规范强制要求支持一个选项标志,即 u (不缓冲输出),这意味着所有字节在读取后都会被指定。默认情况下,一些操作系统会这样做并忽略该标志,例如那些使用 GNU Core Utilities 的。

如果任何输入文件名被描述为一个连字符,cat 命令会按照那个点读取标准输入。如果没有指定文件,cat 命令只会从标准输入读取。

cat 命令的用例

cat 命令可以用于将文件通过管道传递给任何期望在输入流中接收二进制数据或纯文本的程序。cat 命令在输出和合并时不会损坏非文本字节。因此,该命令的两个主要用例是特定格式兼容的二进制文件类型和文本文件。
文本合并仅限于具有相同遗留编码的文本文件,如 ASCII。cat 命令不提供一种方法来合并包含字节顺序标记 (Byte Order Mark) 的 Unicode 文本文件,或包含不同编码的文本文件。

合并后的文件可能不适用于许多结构化的二进制数据集。例如,如果一个文件包含唯一的页眉或页脚,结果将重复这些。尽管如此,对于一些多媒体数字容器格式,最终文件是可接受的,因此 cat 命令提供了一种有效的追加文件方式。视频流可以是一个重要的文件示例,cat 命令可以无问题地合并它们,例如 DV (数字视频) 和 MPEG 程序流 (MPEG-2 和 MPEG-1) 格式,它们本质上是简单的分组流。

cat 命令的选项

  • --show-all, -A: 等同于 -vET。
  • --number-nonblank, -b: 显示所有非空输出行。此外,它会覆盖 -n。
  • -e: 等同于 -vE。
  • --show-ends, -E: 在所有行末显示 $ 符号。
  • --number, -n: 显示每一行输出的行号。
  • --squeeze-blank, -s: 抑制多余的空输出行。
  • -t: 等同于 -vT。
  • --show-tabs, -T: 将 TAB 字符显示为 ^|。
  • -u: 被忽略。
  • --show-nonprinting, -v: 使用 M- 和 ^ 表示法,但 TAB 和 LFD 除外。
  • --version: 显示输出版本信息并退出。
  • --help: 显示帮助菜单并退出。

Linux cat 命令:显示文件内容

'cat' 命令可用于显示文件内容。

语法

示例


Linux cat Display

在上图中,文件 **'jtp.txt'** 通过命令 **"cat jtp.txt"** 显示。

注意:要一次显示多个文件的内容,请在同一行键入文件名,如 **"cat file1 file2 file3... fileN**。

Linux cat 命令用法

选项函数
cat > [文件名]用于创建文件。
cat [旧文件名] > [新文件名]用于将内容从旧文件复制到新文件。
cat [文件1 文件2 等] > [新文件名]用于将多个文件的内容合并到一个文件中。
cat -n/cat -b [文件名]用于显示行号。
cat -e [文件名]用于在每行末尾显示 $ 字符。
cat [文件名] <<EOF用作文件结束标记。

Linux cat 命令 (创建文件)

'cat' 命令可用于使用大于号 **(>)** 创建一个新文件。

语法

示例


Linux cat Create1

在上图中,我们创建了一个名为 **"javatpoint"** 的新文件。现在让我们看看如何创建它。

键入命令 **"cat >javatpoint"** 并按 **'enter'**。您将被引导到下一行。

每行后按 'enter',您将被引导到下一行。要保存文件,请转到下一行,按 **'ctrl+d'**,您的文件将被保存。

追加文件内容

'cat' 命令后跟双大于号 **(>>)** 会将内容追加 (添加到文件末尾) 到您已有的文件中。

语法

示例


Linux cat Creat2

查看上图,在 'javatpoint' 文件末尾添加了一行新内容。键入 **"cat >> javatpoint"** 命令后,输入您想添加的行数。要保存文件,请按 **'ctrl + d'**。

Linux cat 命令 (复制文件)

'cat' 命令可用于将一个文件的内容复制到另一个文件。

语法

示例


Linux cat Copy

在上图中,我们使用命令 **"cat combo > combo2"** 将文件 **'combo'** 的内容复制到了文件 **'combo2'**。

Linux cat 命令 (合并文件)

'cat' 命令可用于将多个文件的内容合并到一个新文件中。

语法

示例


Linux cat concatenate1

查看上图,我们使用命令 **"cat file1 file2 file3 >combo"** 将三个文件 **"file1, file2, and file3"** 合并到一个名为 **"combo"** 的文件中。

请注意三个独立文件的内容,然后是新合并文件 **"combo"** 的内容。

插入新行

在合并多个文件时,使用连字符 (-) 会插入新行。

语法

示例


Linux cat concatenate2

在上图中,我们使用命令 **"cat - file1 file2 file3 >combo"** 在合并 file1, file2 和 file3 的同时,在开头插入了一行新行。

注意:新行只会在文件开头插入。

Linux cat -n 命令 (显示行号)

'cat -n' 选项会在文件中的每一行前面显示行号。

语法

示例


Linux cat Display Line Number1

查看上图;通过键入命令 **"cat -n jtp.txt"**,文件 **'jtp.txt'** 的每一行前面都有行号。

cat -b (文件名)

'cat -b' 选项会移除空行。

语法

示例


Linux cat Display Line Number2

在上一个图中,第 19 行之后,第 20 行也被标记了,但它是一个空行。

在上图中,第 20 行通过命令 **"cat -b jtp.txt"** 被移除。

Linux cat -e 命令 (显示 $)

'cat-e' 选项会在每行末尾显示一个 **'$'** 符号。

语法

示例


Linux cat e

查看上图;有些行包含空格。用户无法识别每行末尾的空格。**"cat -e program"** 命令会在包含空格的每行末尾添加 $ 符号。

Linux cat 命令 (作为结束标记)

'cat << EOF ' 选项会在文件末尾显示一个结束标记。这被称为 **here directive**,文件内容将被保存在给定的结束标记处。

文件也可以通过 **'ctrl + d'** 键保存。它的作用类似于结束标记。

注意: 结束标记可以使用 **'EOF'** 以外的任何单词。

语法

示例


Linux cat end marker

在上图中,我们使用 **'EOF'** 作为结束标记,通过键入命令 **"cat > exm.txt << EOF"** 创建了 **'exm.txt'** 文件。

Linux Cat 过滤器

当 cat 命令在管道中使用时,它除了将 stdin 传送到 stout 之外不做任何事情。

语法

示例


Linux Cat Filter

查看上图,一个 'cat' 或 'tac' 命令的输出作为输入传递给另一个。

显示所有文件内容

cat 命令的基本用法是显示文件内容。简单来说,我们需要在终端窗口中输入 **"cat"**,然后是文件名来显示文件内容。

我们可以将通配符与 cat 命令一起使用,以显示当前目录中的所有文件。

要仅显示目录中某个文本文件的内容,可以键入以下命令。

显示多个文件

此外,我们还可以使用 cat 命令将多个文件内容组合起来,并在终端窗口中一起显示。我们可以使用以下语法同时显示多个文件。

将一个文件的结果复制到另一个文件

cat 命令也可用于将一个文件的结果复制到另一个文件。如果目标文件不存在,它会首先创建它。否则,它会覆盖目标文件。我们可以使用以下语法将一个文件的结果复制到另一个文件。

将一个文件的结果追加到另一个文件

而不是覆盖旧示例中目标文件的结果,我们还可以使用 cat 命令来追加结果。

如果目标文件不存在,它会创建它。否则,它会追加结果。

排序结果

此外,我们可以使用 cat 命令进行合并排序,以字母顺序对结果进行排序。


下一个主题Linux tac