Linux cat命令详解

cat命令

cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。

语法格式

1
cat [-AbeEnstTuv] [--help] [--version] fileName

参数

1
2
3
4
5
6
7
8
9
-n 或 --number:由 1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行结束处显示 $。
-T 或 --show-tabs: 将 TAB 字符显示为 ^I。
-A, --show-all:等价于 -vET。
-e:等价于"-vE"选项;
-t:等价于"-vT"选项;

示例

cat -n:显示行号

1
2
3
4
5
6
7
8
[root@localhost C_Test]# cat -n file1.txt 
1 Hello World!
2
3
4
5 Hello World!
6 ------file1 end-------
[root@localhost C_Test]#

cat -b:显示行号空白行不编号

1
2
3
4
5
6
7
8
[root@localhost C_Test]# cat -b file1.txt 
1 Hello World!



2 Hello World!
3 ------file1 end-------
[root@localhost C_Test]#

cat -s:替换多个空白行为一个空白行

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost C_Test]# cat -n file1.txt 
1 Hello World!
2
3
4
5 Hello World!
6 ------file1 end-------
[root@localhost C_Test]# cat -ns file1.txt
1 Hello World!
2
3 Hello World!
4 ------file1 end-------
[root@localhost C_Test]#

cat -v:

cat -E:显示结束符

1
2
3
4
5
6
7
8
[root@localhost C_Test]# cat -E file1.txt 
Hello World!$
$
$
$
Hello World!$
------file1 end-------$
[root@localhost C_Test]#

cat -T:显示tab键

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost C_Test]# cat file3.txt 
hello file3
hello


--------file3 end-----------
[root@localhost C_Test]# cat -T file3.txt
hello file3
^Ihello


--------file3 end-----------
[root@localhost C_Test]#

cat -A:显示tab键,显示换行符

1
2
3
4
5
6
7
[root@localhost C_Test]# cat -A file3.txt 
hello file3$
^Ihello$
$
$
--------file3 end-----------$
[root@localhost C_Test]#

同时查看多个文件

1
cat file1 file2

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost C_Test]# cat -n file1.txt file2.txt 
1 Hello World!
2
3
4
5 Hello World!
6 ------file1 end-------
7 hello file2
8
9
10
11
12 hello file2
13 ------file2 end---------
[root@localhost C_Test]#

其他应用

cat从标准输入读取内容

cat > filename

1
cat >file4.txt

此时可以从标准输入中,输入文字,如果想结束输入请按下Ctrl键,然后按D键。

这种方法输入并不友好,可以不输入,直接按下Ctrl键,然后按D键,这样就创建一个空的文件。类似于:

1
touch file4.txt

例如从键盘输入hello world!到文件中。然后按下Ctrl+D结束输入:

1
2
3
4
5
6
[root@localhost Linux_Test]# cat >cat_test.txt
hello world![root@localhost Linux_Test]# ls
cat_test.txt less_test.txt ls_sort.txt more_test2.txt more_test4.txt sortFile.txt
date_test.txt ls_out.txt man_less.txt more_test3.txt more_test.txt vi_replaceAllTest.txt
[root@localhost Linux_Test]# cat cat_test.txt
hello world![root@localhost Linux_Test]#

cat >> filename

从标准输入中读取内容,追加到文件中。
上面在文件中没有添加换行符,现在追加一个换行符到文件中:

1
2
3
4
5
6
hello world![root@localhost Linux_Test]# cat >>cat_test.txt 

[root@localhost Linux_Test]# cat cat_test.txt
hello world!
[root@localhost Linux_Test]#

将cat命令与more或less命令一起使用

如果具有大量内容的文件无法容纳在输出终端中,并且屏幕快速滚动,则可以通过cat命令使用越来越多的参数,如上所示。

1
2
cat song.txt | more
cat song.txt | less

输出一个文件的内容到另一个文件的末尾

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost C_Test]# cat file3.txt 
hello file3
hello


--------file3 end-----------
[root@localhost C_Test]# cat file1.txt >> file3.txt
[root@localhost C_Test]# cat file3.txt
hello file3
hello


--------file3 end-----------
Hello World!



Hello World!
------file1 end-------
[root@localhost C_Test]#

合并文件

执行cat时使用输出重定向,可以把多个文件按指定顺序合并成一个文件,这是一个很有用的功能。
例如:

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

file1.txt和file2.txt合并成一个文件file3.txt。

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost C_Test]# cat file1.txt file2.txt 
Hello file1!
------file1 end-------
hello file2
------file2 end---------
[root@localhost C_Test]# cat file1.txt file2.txt >file3.txt
[root@localhost C_Test]# cat file3.txt
Hello file1!
------file1 end-------
hello file2
------file2 end---------
[root@localhost C_Test]#

参考资料

https://www.runoob.com/linux/linux-comm-cat.html
https://zhuanlan.zhihu.com/p/91870070
https://www.jianshu.com/p/69ef4587c874
https://www.howtoing.com/13-basic-cat-command-examples-in-linux