2023-07-20 08:48:22 +08:00
|
|
|
|
[#]: subject: "Using cat Command in Linux"
|
|
|
|
|
[#]: via: "https://itsfoss.com/cat-command/"
|
|
|
|
|
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
|
|
|
|
[#]: collector: "lkxed"
|
|
|
|
|
[#]: translator: "geekpi"
|
2023-07-23 14:44:22 +08:00
|
|
|
|
[#]: reviewer: "wxy"
|
|
|
|
|
[#]: publisher: "wxy"
|
|
|
|
|
[#]: url: "https://linux.cn/article-16025-1.html"
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
在 Linux 中使用 cat 命令
|
|
|
|
|
======
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
![][0]
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
> `cat` 命令的用途不仅仅是显示文件内容。
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
`cat` 命令用于打印文本文件的文件内容。至少,大多数 Linux 用户都是这么做的,而且没有什么问题。
|
|
|
|
|
|
|
|
|
|
`cat` 实际上代表 “<ruby>连接<rt>concatenate</rt></ruby>”,创建它是为了 [合并文本文件][1]。但只要有一个参数,它就会打印文件内容。因此,它是用户在终端中读取文件而无需任何其他选项的首选。
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
### 在 Linux 中使用 cat 命令
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
要使用 `cat` 命令,你必须遵循给定的命令语法:
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat [options] Filename(s)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这里:
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
- `[options]` 用于修改 `cat` 命令的默认行为,例如使用 `-n` 选项获取每行的数字。
|
2023-07-20 08:48:22 +08:00
|
|
|
|
- `Filename` 是你输入要使用的文件的文件名的位置。
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
为了简单起见,我将在本指南中使用名为 `Haruki.txt` 的文本文件,其中包含以下文本行:
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
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
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![use cat command in Linux][2]
|
|
|
|
|
|
|
|
|
|
正如你所看到的,它打印了整个文本文件!
|
|
|
|
|
|
|
|
|
|
但你可以做的远不止这些。让我向你展示一些实际例子。
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
#### 1、创建新文件
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
大多数 Linux 用户使用 `touch` 命令来 [创建新文件][3],但使用 `cat` 命令也可以完成相同的操作!
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
在这种场景下,`cat` 命令比 `touch` 命令有一个优势,因为你可以在创建文件时向文件添加文本。听起来很酷。不是吗?
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
为此,你需要使用 `cat` 命令,将文件名附加到 `>` 后面,如下所示:
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat > Filename
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
例如,在这里,我创建了一个名为 `NewFile.txt` 的文件:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat > NewFile.txt
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
当你这样做了,就会有一个闪烁的光标要求你写一些东西,最后,你可以使用 `Ctrl + d` 来保存更改。
|
|
|
|
|
|
|
|
|
|
**如果你想创建一个空文件,则只需按 `Ctrl + d` 而不进行任何更改。**
|
|
|
|
|
|
|
|
|
|
![Using cat command][4]
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
这就好了!现在,你可以使用 `ls` 命令来显示 [当前工作目录的内容][5]:
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
![use the ls command to list the contents of the current working directory][6]
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
#### 2、将文件内容复制到另一个文件
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
考虑一个场景,你要将 `FileA` 的文件内容重定向到 `FileB`。
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
当然,你可以复制和粘贴。但是如果有几百或几千行怎么办?
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
简单。你可以使用 `cat` 命令来重定向数据流。为此,你必须遵循给定的命令语法:
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat FileA > FileB
|
|
|
|
|
```
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
> 🚧 如果使用上述语法重定向文件内容,它将删除 `FileB` 的文件内容,然后重定向 `FileA` 的文件内容。
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
例如,我将使用两个文本文件 `FileA` 和 `FileB`,其中包含以下内容:
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
![check the file contents using the cat command][7]
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
现在,如果我使用从 `FileA` 到 `FileB` 的重定向,它将删除 `FileB` 的数据,然后重定向 `FileA` 的数据:
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat FileA > FileB
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![redirect the file content using the cat command][8]
|
|
|
|
|
|
|
|
|
|
同样,你可以对多个文件执行相同的操作:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat FileA FileB > FileC
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![redirect file content of multiple files using the cat command][9]
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
可以看到,上面的命令删除了 `FileC` 的数据,然后重定向了 `FileA` 和 `FileB` 的数据。
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
#### 3、将一个文件的内容附加到另一个文件
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
有时你想要将数据附加到现有数据,在这种情况下,你必须使用 `>>` 而不是单个 `>`:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat FileA >> FileB
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
例如,在这里,我将把两个文件 `FileA` 和 `FileB` 重定向到 `FileC`:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat FileA.txt FileB.txt >> FileC.txt
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![redirect file content without overriding using the cat command][10]
|
|
|
|
|
|
|
|
|
|
如你所见,它保留了 `FileC.txt` 的数据,并将数据附加在末尾。
|
|
|
|
|
|
|
|
|
|
> 💡 你可以使用 `>>` 向现有文件添加新行。使用 `cat >> filename` 并开始添加所需的文本,最后使用 `Ctrl+D` 保存更改。
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
#### 4、显示行数
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
你可能会遇到这样的情况,你想查看行数,这可以使用 `-n` 选项来实现:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat -n File
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
例如,在这里,我将 `-n` 选项与 `Haruki.txt` 一起使用:
|
|
|
|
|
|
|
|
|
|
![get the number of the lines in the cat command][11]
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
#### 5、删除空行
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
在文本文档中留下多个空白行? `cat` 命令将为你修复它!
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
为此,你所要做的就是使用 `-s` 标志。
|
|
|
|
|
|
|
|
|
|
但使用 `-s` 标志有一个缺点。你仍然留有一行空白:
|
|
|
|
|
|
|
|
|
|
![remove blank lines with the cat command][12]
|
|
|
|
|
|
|
|
|
|
正如你所看到的,它有效,但结果接近预期。
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
那么如何删除所有空行呢? 通过管道将其传递给 `grep` 命令:
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat File | grep -v '^$'
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这里,`-v` 标志将根据指定的模式过滤掉结果,`'^$'` 是匹配空行的正则表达式。
|
|
|
|
|
|
|
|
|
|
以下是我在 `Haruki.txt` 上使用它时的结果:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat Haruki.txt | grep -v '^$'
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![remove all the blank lines in text files using the cat command piped with grep regular expression][13]
|
|
|
|
|
|
|
|
|
|
当获得完美的输出,你可以将其重定向到文件以保存输出:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cat Haruki.txt | grep -v '^$' > File
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![save output of cat command by redirection][14]
|
|
|
|
|
|
|
|
|
|
### 这就是你到目前为止所学到的
|
|
|
|
|
|
|
|
|
|
以下是我在本教程中解释的内容的快速摘要:
|
|
|
|
|
|
|
|
|
|
| 命令 | 描述 |
|
|
|
|
|
| :- | :- |
|
|
|
|
|
| `cat <Filename>` | 将文件内容打印到终端。 |
|
|
|
|
|
| `cat >File` | 创建一个新文件。 |
|
|
|
|
|
| `cat FileA > FileB` | `FileB` 的文件内容将被 `FileA` 覆盖。|
|
|
|
|
|
| `cat FileA >> FileB` | `FileA` 的文件内容将附加到 `FileB` 的末尾。|
|
|
|
|
|
| `cat -n File` | 显示行数,同时省略文件的文件内容。 |
|
2023-07-23 14:44:22 +08:00
|
|
|
|
| `cat File | more` | 将 `cat` 命令通过管道连接到 `more` 命令以处理大文件。请记住,它不能让你向上滚动! |
|
|
|
|
|
| `cat File | less` | 将 `cat` 命令通过管道传输到 `less` 命令,这与上面类似,但它允许你双向滚动。|
|
2023-07-20 08:48:22 +08:00
|
|
|
|
| `cat File | grep -v '^$'` | 从文件中删除所有空行。|
|
|
|
|
|
|
|
|
|
|
### 🏋️ 练习时间
|
|
|
|
|
|
|
|
|
|
如果你学到了新东西,用不同的可能性来执行它是最好的记忆方式。
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
为此,你可以使用 `cat` 命令进行一些简单的练习。它们将是超级基本的,就像 `cat` 一样是[最基本的命令之一][15]。
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
出于练习目的,你可以 [使用 GitHub 上的文本文件][16]。
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
- 如何使用 `cat` 命令创建空文件?
|
|
|
|
|
- 将 `cat` 命令生成的输出重定向到新文件 `IF.txt`
|
2023-07-20 08:48:22 +08:00
|
|
|
|
- 能否将三个或更多文件输入重定向到一个文件? 如果是,该如何做?
|
|
|
|
|
|
2023-07-23 14:44:22 +08:00
|
|
|
|
*(题图:MJ/f06c9b9c-689e-4a67-abe9-0487e26bd34b)*
|
|
|
|
|
|
2023-07-20 08:48:22 +08:00
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
via: https://itsfoss.com/cat-command/
|
|
|
|
|
|
|
|
|
|
作者:[Sagar Sharma][a]
|
|
|
|
|
选题:[lkxed][b]
|
|
|
|
|
译者:[geekpi](https://github.com/geekpi)
|
2023-07-23 14:44:22 +08:00
|
|
|
|
校对:[wxy](https://github.com/wxy)
|
2023-07-20 08:48:22 +08:00
|
|
|
|
|
|
|
|
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
|
|
|
|
|
|
|
|
|
[a]: https://itsfoss.com/author/sagar/
|
|
|
|
|
[b]: https://github.com/lkxed/
|
|
|
|
|
[1]: https://linuxhandbook.com:443/merge-files/
|
|
|
|
|
[2]: https://itsfoss.com/content/images/2023/06/use-cat-command-in-Linux.png
|
|
|
|
|
[3]: https://itsfoss.com/create-files/
|
|
|
|
|
[4]: https://itsfoss.com/content/images/2023/06/Cat.svg
|
|
|
|
|
[5]: https://itsfoss.com/list-directory-content/
|
|
|
|
|
[6]: https://itsfoss.com/content/images/2023/06/use-the-ls-command-to-list-the-contents-of-the-current-working-directory.png
|
|
|
|
|
[7]: https://itsfoss.com/content/images/2023/06/check-the-file-contents-using-the-cat-command.png
|
|
|
|
|
[8]: https://itsfoss.com/content/images/2023/06/redirect-the-file-content-using-the-cat-command.png
|
|
|
|
|
[9]: https://itsfoss.com/content/images/2023/06/redirect-file-content-of-multiple-files-using-the-cat-command.png
|
|
|
|
|
[10]: https://itsfoss.com/content/images/2023/06/redirect-file-content-without-overriding-using-the-cat-command.png
|
|
|
|
|
[11]: https://itsfoss.com/content/images/2023/06/get-the-number-of-the-lines-in-the-cat-command.png
|
|
|
|
|
[12]: https://itsfoss.com/content/images/2023/06/remove-blank-lines-with-the-cat-command.png
|
|
|
|
|
[13]: https://itsfoss.com/content/images/2023/06/remove-all-the-blank-lines-in-text-files-using-the-cat-command-piped-with-grep-regular-expression.png
|
|
|
|
|
[14]: https://itsfoss.com/content/images/2023/06/save-output-of-cat-command-by-redirection.png
|
|
|
|
|
[15]: https://learnubuntu.com:443/top-ubuntu-commands/
|
2023-07-23 14:44:22 +08:00
|
|
|
|
[16]: https://github.com:443/itsfoss/text-files
|
|
|
|
|
[0]: https://img.linux.net.cn/data/attachment/album/202307/23/144250ljc3zwgjt7llznxj.jpg
|