Linux 管理员 - cat 命令
cat 命令用于连接文件并打印到标准输出。之前,我们已演示了 cat 命令的用途和滥用情况。 cat 服务器具有以下不同的用途 −
显示文件内容
将一个文件的内容写入另一个文件
将多个文件合并为一个文件
支持特殊功能:添加行号、显示特殊字符、消除空行
开关 | 操作 |
---|---|
-b | 编号非空行 |
-E | 显示行尾 |
-T | 显示tabs |
-s | 压缩空白,抑制重复的空行 |
如前所述,在使用 grep、sort 和 uniq 等实用程序时,我们希望尽可能避免从 cat 管道输出。我们之前这样做是为了简单演示管道命令。但是,知道何时使用 grep 等实用程序执行操作是 Linux 管理员与 Linux 最终用户的区别所在。
坏习惯
[root@centosLocal centos]# cat /etc/passwd | sort -t: -k1 | grep ":0" halt:x:7:0:halt:/sbin:/sbin/halt operator:x:11:0:operator:/root:/sbin/nologin root:x:0:0:root:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown sync:x:5:0:sync:/sbin:/bin/sync [root@centosLocal centos]#
好习惯
[root@centosLocal centos]# grep ":0" /etc/passwd | sort -t: -k 1 halt:x:7:0:halt:/sbin:/sbin/halt operator:x:11:0:operator:/root:/sbin/nologin root:x:0:0:root:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown sync:x:5:0:sync:/sbin:/bin/sync [root@centosLocal centos]#
注意 − 仅在需要时才将 cat 管道连接到 sort 或 grep 等辅助命令。
cat 的一个常见用途是处理 Windows 格式的换行符。Linux 和 Windows 都根据内部设计使用不同的控制代码来表示行尾 (EOL)−
* Linux line break is always a Line Feed: LF or depicted as " ". * Windows is Carriage Return followed by a Line Feed: CR LF or depicted as " ". * Macintosh, in all moderne releases of OS X and now macOS, has adopted the Linux/Unix standard of LF or " "
因此,假设我们在 GUI 文本编辑器(如 gedit)中打开文件,或者在应用过滤命令时遇到随机问题。文本出现在一行上,或者过滤命令无法按预期运行。
特别是,当文本文件是从互联网上下载时,我们想要检查换行符。以下是 cat 的示例输出,显示 EOL 字符。
[root@centosLocal centos]# cat -E ./Desktop/WinNames.txt $ed:Daniel:101 $enny:Colon:608 $ana:Maxwell:602 $arian:Little:903 $obbie:Chapman:403 $icolas:Singleton:203 $ale:Barton:901
注意到每行前面的"$"了吗?Linux 正在读取 CR" ",从而破坏文件。然后将回车符翻译到每个文件的第一个字符上。
当不使用 -E 开关查看时,文件看起来不错 −
[root@centosLocal centos]# cat ./Desktop/WinNames.txt Ted:Daniel:101 Jenny:Colon:608 Dana:Maxwell:602 Marian:Little:903 Bobbie:Chapman:403 Nicolas:Singleton:203 Dale:Barton:901
幸运的是,使用 Linux 过滤命令可以轻松修复这个问题 −
[root@centosLocal centos]# sed -i 's/ $//g' ./Desktop/WinNames.txt [root@centosLocal centos]# cat -E ./Desktop/WinNames.txt Ted:Daniel:101$ Jenny:Colon:608$ Dana:Maxwell:602$
注意 − 使用 -E 开关查看时,所有 Linux 换行符都将以 $ 结尾。
cat 还可用于将多个文件合并为一个文件。
[root@centosLocal centos]# cat linux.txt CentOS Ubuntu Red Hat Suse Debian [root@centosLocal centos]# cat windwos.txt NT 3.5 NT 4.0 Server 2000 Server 2003 Server 2008 Server 2012 Server 2016 [root@centosLocal centos]#
现在让我们使用 cat 来合并这两个文件。
[root@centosLocal centos]# cat windwos.txt linux.txt > server_class_operating_sytems.txt [root@centosLocal centos]# cat server_class_operating_sytems.txt NT 3.5 NT 4.0 Server 2000 Server 2003 Server 2008 Server 2012 Server 2016 CentOS Ubuntu Red Hat Suse Debian [root@centosLocal centos]#
最后,我们可以使用 -n 开关对每个输出行进行编号。这样我们就可以得到总共有多少行。
[root@centosLocal centos]# cat -n ./server_class_operating_sytems.txt 1 NT 3.5 2 NT 4.0 3 Server 2000 4 Server 2003 5 Server 2008 6 Server 2012 7 Server 2016 8 CentOS 9 Ubuntu 10 Red Hat 11 Suse 12 Debian [root@centosLocal centos]#
basic_centos_linux_commands.html