一、命令详解
1.命令说明
cat
的全称 concatenate
,它是一个标准的Linux实用程序,用于查看文件的内容,而不需要在任何文本编辑器中打开它。cat 命令允许我们创建单个或多个文件、查看文件内容、连接文件和重定向终端或文件中的输出。
cat命令的另一个主要用法是将多个文件串联到一个文件中。
2.语法格式
cat [option] [file]
cat [选项] [文件名称]...
3.选项描述
DESCRIPTION
-A, --show-all equivalent to -vET
#等价于 -vET。
-b, --number-nonblank number nonempty output lines, overrides -n
#和 -n 相似,只不过对于空白行不编号。
-e equivalent to -vE
#等价于 -vE。
-E, --show-ends display $ at end of each line
#在每行结束处显示 $。
-n, --number number all output lines
#显示输出的所有行号(空行也编号)
-s, --squeeze-blank suppress repeated empty output lines
#当有连续两行以上的空白行,就代换为一行的空白行。(压缩)
-t equivalent to -vT
#等价于 -vT。
-T, --show-tabs display TAB characters as ^I
#将跳格字符显示为 ^I。
-u (ignored)#忽略
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
#使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外。
二、命令示例
案例1:显示文件内容#cat
root@centos7 app]#cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
案例2:查看多个文件的内容
[root@centos7 app]#cat f1
word
1234
[root@centos7 app]#cat f2
hello linux
[root@centos7 app]#cat f1 f2
word
1234
hello linux
案例3:创建文件
[root@centos7 app]#cat > 222
1
2
3
4
[root@centos7 app]#cat 222
1
2
3
4
输入
cat > 222
命令后,用户输入所需文本,然后按 CTRL+D 退出。输入的文本将写在222文件。
案例4:把文件内容加上行号#cat -n
[root@centos7 app]#cat -n f1
1 word
2 1234
3 aaaaa
4 bbbbb
案例5:把文件内容加上行号(空白行不加)#cat -b
[root@centos7 app]#cat -b ls.log
1 config-3.10.0-1160.el7.x86_64
2 efi
3 grub
4 grub2
5 initramfs-0-rescue-874f8277327c49909f43ada8b702796f.img
6 initramfs-3.10.0-1160.el7.x86_64.img
7 initramfs-3.10.0-1160.el7.x86_64kdump.img
8 symvers-3.10.0-1160.el7.x86_64.gz
9 System.map-3.10.0-1160.el7.x86_64
10 vmlinuz-0-rescue-874f8277327c49909f43ada8b702796f
11 vmlinuz-3.10.0-1160.el7.x86_64
案例6:将多个文件按序输出追加到另一个文件
[root@centos7 app]#cat f1 f2 ls.log >>f5
[root@centos7 app]#cat -n f5
1 word
2 1234
3 aaaaa
4 bbbbb
5 hello linux
6 config-3.10.0-1160.el7.x86_64
7 efi
8 grub
9 grub2
10 initramfs-0-rescue-874f8277327c49909f43ada8b702796f.img
11 initramfs-3.10.0-1160.el7.x86_64.img
12 initramfs-3.10.0-1160.el7.x86_64kdump.img
13 symvers-3.10.0-1160.el7.x86_64.gz
14 System.map-3.10.0-1160.el7.x86_64
15 vmlinuz-0-rescue-874f8277327c49909f43ada8b702796f
16 vmlinuz-3.10.0-1160.el7.x86_64
将多个文件合并为一个文件。
文件的顺序决定决定内容追加的顺序。
注意:
>
是重定向到文件中,会覆盖
>>
是追加内容,不会覆盖
案例7:复杂用法,内容过滤
[root@centos7 app]#cat -n f5 | grep vm #包含vm
15 vmlinuz-0-rescue-874f8277327c49909f43ada8b702796f
16 vmlinuz-3.10.0-1160.el7.x86_64
[root@centos7 app]#cat -n f5 | grep -v vm #不包含vm
1 word
2 1234
3 aaaaa
4 bbbbb
5 hello linux
6 config-3.10.0-1160.el7.x86_64
7 efi
8 grub
9 grub2
10 initramfs-0-rescue-874f8277327c49909f43ada8b702796f.img
11 initramfs-3.10.0-1160.el7.x86_64.img
12 initramfs-3.10.0-1160.el7.x86_64kdump.img
13 symvers-3.10.0-1160.el7.x86_64.gz
14 System.map-3.10.0-1160.el7.x86_64
案例8:配合more和less参数使用,翻页
# cat a.txt | more
# cat a.txt | less
案例9:在文件末尾显示$
[root@centos7 app]#cat -e f1
word$
1234$
aaaaa$
bbbbb$
案例10:反向显示内容 #tac
[root@centos7 app]#cat f1
word
1234
aaaaa
bbbbb
[root@centos7 app]#tac f1
bbbbb
aaaaa
1234
word
案例11:脚本中的灵活用法
在脚本中经常见到类似于
cat << EOF
的语句,EOF是“end of file”,表示文本结束符,是常用做法。
[root@centos7 app]#cat <<EOF >> cat.txt
> hello #输入模式,输入内容
> i am JJ #输入模式,输入内容
> nice #输入模式,输入内容
> EOF #结束符,输入完就退出输入模式
另一种写法
[root@centos7 app]#cat >> cat.txt<<EOF
> 1
> EOF
EOF在这里没有特殊的含义,可以使用任意字符,任意数量、大小写。
可以把EOF替换成其他东西,意思是把结束符内容当作标准输入的结束。
几种常见的使用方式及其作用:
1、
cat <<EOF
,以EOF输入字符为标准输入结束:
2、cat > filename
,创建文件,并把标输入文本到filename文件中,以ctrl+d作为输入结束。
注意:此处输入时是没有’>‘的。
3、cat>filename<<EOF
,以EOF字符作为输入结束,和ctrl+d的作用一样。
注意:此处输入时是有’>'的。
案例12:利用重定向清空文件
如果一个文件有很多内容,而你想要清空的话,可以使用上面提到的命令形式
cat >cat.txt <<EOF
[root@centos7 app]#cat cat.txt
hello
i am JJ
nice
1
[root@centos7 app]#cat <<EOF > cat.txt
> 11
> EOF
[root@centos7 app]#cat cat.txt
11
案例13:特殊字符输入$
利用cat命令生成一些 Shell 脚本文件,会使用到$。这个时候如果直接写 $ 符号,有可能被认为是调用变量,导致无法写入文件。
示例:
[root@centos7 app]#cat <<EOF > cat.txt
> DATE=$(date +%F)
> mkdir /app/$DATE
> EOF
[root@centos7 app]#cat cat.txt
DATE=2022-12-13
mkdir /app/
#第一行输入的带$的字符没有显示出来
可以看见第一行 $
符号并没有输入到文件中。
如果需要正确的输入到文本中,就要在 $
符号前面加 \
[root@centos7 app]#cat <<EOF>cat.txt
> DATE=\$(date + %F)
> mkdir /app/\$DATE
> EOF
[root@centos7 app]#cat cat.txt
DATE=$(date + %F)
mkdir /app/$DATE
这样把
$
转义,就可以得到正常的文件内容。