cat可以接受来自stdin的信息,一般用来显式或查看内容,如果信息来源是多个,则可以进行内容的追加拼接(上下拼接,而不是左右拼接)。
-n显示行号。
-E将每行结尾的换行符用$表示出来,以分辨哪里是换行了的。
-A比-E效果更多,不仅行尾用$表示,空格也表示
-s压缩空行,将有连续空行的地方压缩成一行。
-T将制表符使用^I标记出来,这主要是为了将制表符和空格区分开。
示例:
[[email protected] tmp]# cat test1.sh
#!/bin/bash
i=4
until echo "$i"
test $i -eq 0
do
echo "in looping"
let i-=1
done
加上几个参数。
[[email protected] tmp]# cat -sTn test1.sh
1 #!/bin/bash
2
3 i=4
4 until echo "$i"
5 ^Itest $i -eq 0 ç制表符被标识为^I
6 ç空行被压缩
7 do
8 echo "in looping"
9 ^Ilet i-=1
10 done
内容拼接。
[[email protected] tmp]# cat -Tsn test1.sh test1.sh çTsn选项会作用于拼接后的内容
1 #!/bin/bash
2
3 i=4
4 until echo "$i"
5 ^Itest $i -eq 0
6
7 do
8 echo "in looping"
9 ^Ilet i-=1
10 done
11 #!/bin/bash
12
13 i=4
14 until echo "$i"
15 ^Itest $i -eq 0
16
17 do
18 echo "in looping"
19 ^Ilet i-=1
20 done
关于cat还有一个很重要的功能,可以以分行写的方式将多行内容输入到一个文件中去。
首先测试第一步:可以知道<<eof配对中的内容是cat命令的标准输入stdin,这时候eof可以随便使用其他符号代替。
[[email protected] tmp]# cat <<eof
> abc.com
> eof
abc.com
[[email protected] tmp]# cat <<EOF
> EOF
[[email protected] tmp]# cat <<EOx
> EOx
那么测试使用<eof试试。发现没有输入的机会。并且此时只能使用eof作为符号,EOF或其他任何都不可以。因为<eof是直接覆盖stdin,也就是没有输入。所以一定要使用<<eof。
[[email protected] tmp]# cat <eof
[[email protected] tmp]# cat <eox
-bash: eox: No such file or directory
[[email protected] tmp]# cat <EOF
-bash: EOF: No such file or directory
再进一步测试<<eof的功能,使用它来分行输入内容到文件中。这时有两种方案:
第一种方案:
[[email protected] ~]# cat >>/tmp/test.txt<<EOF ç输入到这里按回车键继续输入下一行 ç覆盖的方式到test.txt
> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ç按回车输入下一行
> yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy ç按回车输入下一行
> zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz ç按回车输入下一行
> EOF ç顶格写EOF结束输入
第二种方案:
[[email protected] tmp]# cat <<eof>log.txt ç追加的方式到log.txt
> abc.com
> eof
两种方案结果是一样的,只是注意<<eof是cat的stdin就是了,顺便控制好是对文件进行覆盖还是追加输入。
(1). 文件test.txt可以预先不存在,输入完毕后会自动创建;
(2). <<EOF的EOF可以换成任意其他字母,但是结束输入时,必须和开始输入字母对应。