Linux的cat命令技巧

cat命令是Linux中最常用的命令之一,cat命令的名称来自于concatenate。cat最常用于打印一个或多个文本文件的内容

7 min read
By myfreax
Linux的cat命令技巧

cat命令是Linux中最常用的命令之一,cat命令的名称来自于concatenate。它可以读取和连接文件,并将其内容写入到标准输出

如果未指定文件名或指定连字符-作为参数,则从标准输入读取内容,即复制标准输入到标准输出。

cat最常用于打印/查看一个或多个文本文件的内容。将一个文件的内容追加到另一个文件的末尾来组合文件,以及创建新文件。

在本教程中我们将说名一些cat命令技巧的技巧。包括使用cat打印文件内容,重定向文件的内容,打印行号,去除重复的空行,显示TAB和空格字符,打印不可见字符,用cat连接文件,使用cat创建文件。

cat命令语法

在讨论如何使用cat命令之前,让我们先回顾一下基本语法。cat命令表达式采用cat [OPTIONS] [FILE_NAMES]的形式。

OPTIONS是选项,可使用cat --help可查看所有可用的选项。FILE_NAMES零个或多个文件名。

如果FILE_NAMES没有传递给cat命令请指定指定连字符-作为参数,从标准输入读取内容

打印/查看文件内容

cat命令最基本和最常见的用法是读取/查看/打印文件的内容。将打印文件内容到标准输出中。

例如,以下cat命令将在终端打印/etc/issue文件的内容,将输出你当前的Linux发行版的名称:

cat /etc/issue

重定向文件的内容

默认情况下cat命令将内容打印/写入标准输出。但您可以使用重定向操作符>或者>>将输出重定向到文件,而不是将内容打印到标准输出,即终端的屏幕上。

cat命令与重定向操作符一起使用时,你会发现cat命令也可实现cp命令的复制文件操作。如果cp命令不可用可使用cat命令代替,但这种几乎不会发生。

以下cat命令将file1.txt的内容使用重定向操作符>复制到file2.txt。如果file2.txt文件不存在,cat命令将创建该文件。否则,它将被覆盖:

cat file1.txt > file2.txt

cat命令除了可以实现复制文件之外。还可以使用另一个重定向操作符>>>>操作符可追加任何内容到指定设备或者文件中。

以下cat命令将file1.txt内容追加到file2.txt。如果文件不存在,则将创建该文件。如果存在则追加到文件末尾:

cat file1.txt >> file2.txt

打印行号

很多VPS的提供上商预构建的Linux服务器,基本都不会预装桌面环境Gnome/KDE等。也就是说你不可能在Linux服务器安装带GUI的编辑器。

此时如果需要打印文件的行号,除了使用vim/nano命令行编辑器打开文件显示行号之外,还可以是cat命令。

cat命令在编写脚本需要打印行号时也非常有用。例如打印脚本提供的选项

如你需要显示文件的内容并带有行号,请使用-n选项,以下cat命令将带行号显示/etc/lsb-release内容:

cat -n /etc/lsb-release
1	DISTRIB_ID=Ubuntu
2	DISTRIB_RELEASE=18.04
3	DISTRIB_CODENAME=bionic
4	DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS"

去除重复的空行

在编写脚本时你可能会在读入文件时,想去除文件中重复出现的空行。也就是说将多个空行删除为一个空行。

cat命令的-s选项可以轻松帮你实现这一点,让省去很多不需要shell代码。节省你的时间。

以下cat命令将删除重复的空行输出,你将会多个空行的位置仅剩下一个空行:

cat -s file.txt

显示TAB字符

如果你为不可见的制表符号感到困扰。cat命令的-T选项可以在视觉上区分tab制表符和空格,TAB字符将显示为^I

以下cat命令将使用将-T选项打印/etc/hosts文件中的内容,可让你直观的看到tab制表符:

cat -T /etc/hosts
127.0.0.1^Ilocalhost
127.0.1.1^Iubuntu1804.localdomain

打印不可见字符

cat命令的-e选项可以在视觉上查看行的结束位置,cat命令打印内容时,将在行的结尾处显示为$标记的行的结束。

以下cat命令将使用将-e选项打印/etc/lsb-release文件中的内容,可让你直观的看到行结束位置:

cat -e /etc/lsb-release
DISTRIB_ID=Ubuntu$
DISTRIB_RELEASE=18.04$
DISTRIB_CODENAME=bionic$
DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS"$

合并/连接文件

将两个或多个文件名作为参数传递给cat命令时,这会连接文件的内容。cat命令将按其参数中给出的顺序读取文件,并以相同的顺序显示文件的内容。

这相当于将第二个文件的内容追加到第一个文件中,并在终端中显示两个文件的内容。这对于你想显示两个文件内容那个,但有不想创建文件时非常有用。

例如,以下cat命令将读取file1.txtfile2.txt的内容,并在终端中显示两个文件的所有内容:

cat file1.txt file2.txt

在查看两个文件的合并结果后,得到你想要的结果。您可以将连接/合并两个或多个文件的结果。使用重定向操作符写入到文件中。如果文件不存在,命令将创建它。

以下cat命令将连接file1.txt和的file2.txt文件内容,并使用重定向>操作符将它们写入新文件combinedfile.txt

cat file1.txt file2.txt > combinedfile.txt

你也可以使用另一个重定向操作符>>>>操作符可追加任何内容到指定设备或者文件中。如果文件不存在,则将创建该文件。

以下cat命令将file1.txt内容追加到file2.txt。如果file3.txt存在则追加到文件末尾,否则会创建文件:

cat file1.txt file2.txt >> file3.txt

创建文件

在编写脚本时你可能会想让用户输出非常的长的内容并让用户输入任何字符然后保存到文件中。

此时可能会想到的时使用Vim,Sublime Text,Visual Studio Code或其他文本编辑器,但用户的计算机并一定存在这些编辑器。

如果你使用打开vim让用户输入内容,但并不是所有用户都会使用这个让新用户不知道从何入手的编辑器。

最简单的解决方式就是使用cat作为编辑器一样让用户输入任何内容。在运行cat命令时使用跟重定向运算符>作为选项和要创建的文件的名称作为参数。这时就像打开一个编辑器一样。

当用户的完成内容的出入后,可按CRTL+D保存文件。如果用户不知道如何保存内容时,你可在运行cat之前告诉用户保存的快捷键CRTL+D

运行以下cat命令创建一个名为的新文件file1.txt,在按下回车后你可输入任何内容,然后CRTL+D保存:

cat > file1.txt

如果文件file1.txt存在,则将覆盖该文件。使用>> 运算符将追加到file1.txt文件。

结论

你已经知道如何使用cat命令和基础的选项。如有疑问请在下方留言