查看原文
其他

在 Linux 中巧用 cat 命令

为开发者服务的 21CTO 2023-10-23

导读:本文帮助大家学习cat命令,不管是老手还是新手都是有用。

在Linux中,cat并不一只猫,而是一个命令,它用于打印文本文件的文件内容。

至少,大多数 Linux 用户都是这么做的,而且没有什么问题。

其实Cat 实际上代表“连接”,是为了合并文本文件而创建的。但只要有一个参数,它就会打印文件内容。

因此,它是用户在终端中读取文件而无需任何其他选项。

使用cat命令

我们要使用 cat 命令,须遵循如下给定的命令语法:

cat [options] Filename(s)

说明这里

  • [options]用于修改 cat 命令的默认行为,例如使用选项-n获取每行的数字。

  • Filename 表示要使用的文件名称


了简单起见,我将使用本指南中命名的文本文件Haruki.txt,其中包含以下文本内容,每一段分一行。如下:

Hear the Wind Sing (1979)Pinball, 1973 (1980)A Wild Sheep Chase (1982)Hard-Boiled Wonderland and the End of the World (1985)Norwegian Wood (1987)Dance Dance Dance (1990)South of the Border, West of the Sun (1992)The Wind-Up Bird Chronicle (1994)Sputnik Sweetheart (1999)Kafka on the Shore (2002)After Dark (2004)1Q84 (2009-2010)Colorless Tsukuru Tazaki and His Years of Pilgrimage (2013)Men Without Women (2014)Killing Commendatore (2017)

那么,在没有任何选项的情况下使用时,输出会是什么?我们看一下:

cat Haruki.txt


正如你所看到的,它打印了整个文本文件!但你可以做的远不止这些。接下来向大家展示一些更实际的例子。

1.创建新文件


大多数 Linux 用户使用 touch 命令来创建新文件,但使用 cat 命令也可以完成相同的操作。

而且在这种情况下,cat 命令比 touch 命令有一个优势,因为您可以在创建文件时向文件添加文本。听起来是不是很酷?

我们使用 cat 命令,将文件名附加到>号之后,如下所示:

cat > Filename

例如,在这里我创建了一个名为NewFile.txt:

cat > NewFile.txt

一旦你这样做了,就会有一个闪烁的光标让你写一些东西,写入完毕后,你可以用Ctrl + d保存更改。

如果只想创建一个空文件,直接按Ctrl + d 就可以进行无任何内容的文件保存。


就是这样!现在可以使用 ls 命令显示当前工作目录的内容:


2. 将文件内容复制到另一个文


考虑一个场景,你想要将FileA的文件内容复制到FileB中去。当然,我们可以复制和粘贴,但是如果文件有数百或数千行怎么办?


很简单。你可以使用 cat 命令来重定向数据流。遵循以下给定的命令语法:


cat FileA > FileB

使用上述语法重定向文件内容,它将清除 FileB 文件的原有内容,然后将 FileA 的文件内容复制过来。

例如,我使用两个文本文件 FileA 和 FileB,其中包含以下内容:


现在,如果我使用从 FileA 到 FileB 的重定向,它将删除 FileB 的数据,然后重定向 FileA 的数据:

cat FileA > FileB


同样道理,你可以对多个文件同时执行操作:

cat FileA FileB > FileC

可以看到,上面的命令删除了FileC的数据,然后导入了FileA和FileB的文件数据。

将一个文件的内容追加到另一个文件


有时我们想要将数据追加到现有数据中怎么办。在这种情况下,须使用双大于号 >>符号,而不再是单大于号 >:

cat FileA >> FileB

例如,我将重定向两个文件FileA和FileB的内容全部追加到FileC中:

cat FileA.txt FileB.txt >> FileC.txt


正如大家所看到的,它保留了FileC.txt的原有数据,并将新数据附加在其末尾。

这样我们就可以使用>>向现有文件添加新内容/新行。使用cat >> filename 始添加所需的文本,最后使用Ctrl+D保存文件,搞定

4. 显示行数/行号


你可能会遇到这样的情况,在编辑文件时,特别是写代码是想查看行数,可以使用-n选项来实现:

cat -n File

在这里,我使用了-n选项显示 Haruki.txt 的内容:


5.删除空行


在文本文档中有不少空白行?莫要着急,cat 命令将为你修复它!所要做的就是使用该-s参数。


但使用该参数有一个缺点-s,仍然要有一行空白:


正如大家所看到的,它是有效的,结果也基本接近预期。

那么如何删除所有空行呢?可以通过管道方式将其传递给 grep 命令:

cat File | grep -v '^$'


在这里,-v标志将按照这指定的模式过滤掉结果,'^$'是匹配空行的正则表达式。

以下是我使用实际文件时的结果:

cat Haruki.txt | grep -v '^$'



一旦获得完整的输出,便可以将其重定向到文件以便保存:

cat Haruki.txt | grep -v '^$' > File


以上就是到目前为止,我们一起所学到的全部内容。


接下来是我在本教程中解释的内容的摘要表格:

命令描述
cat <Filename>将文件内容打印到终端
cat >File创建一个新文件
cat FileA > FileB的文件内容FileB将被FileA替换
cat FileA >> FileB将FileA的内容追加在FileB内容之后
cat -n File显示文件行数,但同时省略文件的内容显示 。
cat File | more将 cat 命令通过管道连接到 more 命令以处理大文件
cat File | less将 cat 命令通过管道传输到 less 命令,这与上面类似,但它允许双向滚动。
cat File | grep -v '^$'从文件中删除所有空行



如果你学到了新东西,用不同的参数和文件来实践执行,是最好的记忆方式。

以下给大家留个作业题。

  1. 如何使用 cat 命令创建一个空文件?

  2. 将 cat 命令生成的输出重定向到新文件IF.txt

  3. 可以将三个或更多文件输入重定向到一个文件吗?如果是,那么如何做?


是时候锻炼身体了!


编译:老王

参考:https://itsfoss.com/cat-command/


相关阅读:

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存