菜鸟科技网

深入解析Unix命令cat,核心功能、隐藏技巧及高效使用场景全解析

cat 命令是什么?

catconcatenate (连接、串联) 的缩写,虽然它的名字意思是“连接”,但最广为人知的用途是显示文件内容

深入解析Unix命令cat,核心功能、隐藏技巧及高效使用场景全解析-图1
(图片来源网络,侵删)

cat 命令在 Linux/Unix 系统中是标准输入输出流处理工具,功能强大且用途广泛。


基本语法

cat [选项] [文件名...]
  • 选项: 用于控制 cat 命令的行为。
  • 文件名: 可以是一个或多个文件名。cat 会将这些文件的内容按顺序连接并输出到标准输出(通常是你的终端屏幕)。

主要功能和常用选项

显示文件内容 (最常用的功能)

这是 cat 最简单的用法,如果只提供一个文件名,它会将该文件的全部内容打印到屏幕上。

示例: 假设你有一个名为 hello.txt 的文件,内容如下:

Hello, World!
This is a test file.

执行命令:

深入解析Unix命令cat,核心功能、隐藏技巧及高效使用场景全解析-图2
(图片来源网络,侵删)
cat hello.txt

终端输出:

Hello, World!
This is a test file.

注意事项:

  • 如果文件非常大(比如几百MB或几GB),使用 cat 会让你的终端窗口瞬间被刷屏,导致你无法看到文件的开头部分,对于大文件,推荐使用 lessmore 命令进行分页查看。
    less bigfile.log

同时显示多个文件

cat 可以按顺序连接并显示多个文件的内容。

示例: 你有 file1.txtfile2.txt 两个文件。

深入解析Unix命令cat,核心功能、隐藏技巧及高效使用场景全解析-图3
(图片来源网络,侵删)
cat file1.txt file2.txt

终端会先显示 file1.txt 的全部内容,紧接着显示 file2.txt 的全部内容。

重定向到新文件

你可以使用输出重定向符 >cat 的输出(一个或多个文件的内容)写入到一个新文件中,如果目标文件已存在,它将被覆盖

示例:

cat file1.txt file2.txt > combined.txt

执行后,会创建一个名为 combined.txt 的新文件,其内容是 file1.txtfile2.txt 的连接。

追加到现有文件

使用输出追加重定向符 >> 可以将 cat 的输出追加到现有文件的末尾,而不是覆盖它。

示例: 假设 combined.txt 已经存在,你想要在它后面再添加 file3.txt 的内容:

cat file3.txt >> combined.txt

这样,combined.txt 的末尾就会增加 file3.txt 的内容。

从标准输入读取内容

当你不带任何文件名运行 cat 时,它会进入“交互模式”,等待你从键盘输入,你可以输入任意多行文本,按 Ctrl+D (EOF, End of File) 结束输入,cat 会将你输入的所有内容输出到标准输出。

示例:

cat

然后你开始输入:

This is line 1.
This is line 2.
And this is the final line.

最后按 Ctrl+D,终端会原样输出你输入的三行内容。

这个功能通常与输入重定向 < 或管道 结合使用,但最经典的应用是创建一个新文件。

使用 cat 创建一个新文件并写入内容:

cat > my_new_file.txt

然后输入你想要写入的内容,最后按 Ctrl+D就会被保存到 my_new_file.txt 中。


常用选项详解

选项 全称 描述 示例
-n --number 对所有输出的行数进行编号(包括空行)。 cat -n hello.txt
-b --number-nonblank 对非空行进行编号,空行不显示行号。 cat -b hello.txt
-A --show-all 显示所有字符,包括不可见的字符,如行尾的 (使用 -E) 和制表符 ^I (使用 -T),这是 -vET 的组合。 cat -A file_with_tabs.txt
-T --show-tabs 将制表符显示为 ^I cat -T file_with_tabs.txt
-E --show-ends 在每行结尾显示 符号。 cat -E hello.txt
-s --squeeze-blank 将连续的多个空行压缩为一个空行 cat -s messy_file.txt
-v --show-nonprinting 使用 ^M- 来显示控制字符(除了 TabLine Feed)。 cat -v control_chars.txt

实用技巧和高级用法

使用 cat 显示行号

# 显示行号(包括空行)
$ cat -n script.sh
     1  #!/bin/bash
     2  echo "Hello, World!"
     3  for i in {1..5}
     4  do
     5    echo "Number $i"
     6  done
     7
# 只对非空行编号
$ cat -b script.sh
     1  #!/bin/bash
     2  echo "Hello, World!"
     3  for i in {1..5}
     4  do
     5    echo "Number $i"
     6  done
     7

查看文件中的特殊字符

文件中可能包含看不见的空格或制表符,这会导致脚本或程序出错,使用 -A-vTE 可以轻松识别它们。

# 假设文件末尾有一个看不见的空格
$ cat -A file_with_issue.txt
Hello, World!^M$  <-- ^M 表示 Windows 的回车符 (CRLF)
Goodbye^I$       <-- ^I 表示一个制表符

合并多个文件并添加标题

你可以通过命令的组合来实现更复杂的功能,合并多个文件,并在每个文件内容前添加一个标题。

# 使用 echo 和 cat 的组合
echo "===== Section 1: Log Data =====" > report.log
cat system.log >> report.log
echo -e "\n\n===== Section 2: Error Log =====" >> report.log
cat error.log >> report.log

cat vs. less, more, head, tail

初学者常常混淆这些命令,了解它们的区别很重要:

命令 主要用途 特点
cat 显示整个文件内容 一次性全部输出,适合短文件或需要将内容作为输入传递给其他命令时使用。
less 分页查看文件内容 可以向上/下滚动,搜索内容,是查看大文件的首选工具
more 分页查看文件内容 less 的前身,功能较少,只能向下滚动,不能向上。
head 查看文件的开头部分 默认显示前 10 行,可以用 -n 指定行数,如 head -n 20 file.txt
tail 查看文件的结尾部分 默认显示后 10 行,非常适合查看日志文件的最新更新。-f 选项可以实时跟踪文件变化。

cat 是一个看似简单但极其强大的命令,是 Unix/Linux 哲学“小工具,大作用”的完美体现,它的核心是连接和显示,但通过与标准输入输出、重定向和管道结合,它可以胜任从简单查看文件到复杂文本处理的各种任务。

cat 的核心优势:

  • 快速查看短文件。
  • 连接多个文件。
  • 从键盘或标准输入创建/追加内容。
  • 作为其他命令的输入源(管道)。
分享:
扫描分享到社交APP
上一篇
下一篇