cat命令
输出一个或多个文件的内容。
cat [OPTION]... [FILE]...
选项说明
-n:显示所有行的行号
-b:显示非空行的行号
-E:在每行行尾加上$符号
-T:将TAB符号输出为"^I"
-s:压缩连续空行为单个空行
cat还有一个重要功能,允许将分行键入的内容输入到一个文件中去。
首先测试<<eof,这表示将键入的内容追加到标准输入stdin中(不是从标准输入中读取), eof可以随便使用其他符号代替。
[root@xuexi tmp]# cat <<eof > abc.com > eof abc.com
再测试<eof,发现没有输入的机会,并且此时只能使用eof作为符号,EOF或其他任何都不可以。因为<eof是读取标准输入,会将eof当成输入文件处理。所以一定要使用<<eof,这表示here document,而两个eof正是document的起始和结束标志。
[root@xuexi tmp]# cat <eof
[root@xuexi tmp]# cat <eox -bash: eox: No such file or directory [root@xuexi tmp]# cat <EOF -bash: EOF: No such file or directory
再进一步测试<<eof的功能,将键入的内容重定向到文件而非标准输入中。这时有两种书写方案:
第一种方案:>>filename<<eof或>filename<<eof
[root@xuexi ~]# cat >>/tmp/test.txt<<EOF # 输入到这里按回车键继续输入下一行 > xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 按回车输入下一行 > yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy # 按回车输入下一行 > zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz # 按回车输入下一行 > EOF # 顶格写EOF结束输入
第二种方案:<<eof>filename或<<eof>>filename
[root@xuexi tmp]# cat <<eof>log.txt > abc.com > eof
两种方案结果是一样的,且总是使用<<eof,只不过所写的位置不同而已,不管写在哪个位置,它都表示将键入的内容追加到标准输入。然后再使用>filename或>>filename控制重定向的方式,将标准输入中的内容重定向到filename文件中。