Linux之cat的使用介绍

  • 2020 年 5 月 17 日
  • 筆記

                                                                                            cat选项分析

选项解析:

-A, –show-all 等价于 -vET -b, –number-nonblank 对非空输出行(包括仅仅有空格的行)编号,空输出行,指的是该行没有任何内容,即连续2次敲击回车按钮。 -e 等价于 -vE -E, –show-ends 在每行结束处显示 $ -n, –number 对输出的所有行编号,包括空行(连续敲击2次回车键的情况)和非空行。即所有行。 -s, –squeeze-blank 不输出多行空行,注意这里指的是如果有多个连续的空行,那么仅仅输出一个空行(空行指的是没有任何内容的行,实际上该行可能仅仅有1个换行符,如果是最后一行,那么连换行符也没有),注意空格不属于空行。 -t 与 -vT 等价 -T, –show-tabs 将跳 字符显示为 ^I -u (被忽略) -v, –show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外,显示非打印字符。打印出非打印字符,如window编辑文档的\r\n,显示为^M 

 案例:查看当前目录下test.txt的文件的全部内容
[root@iZ25ja2kaemZ ~]# cat ./test.txt
1
2
3
4
5
$$$$
6
78
8
9$
over 

案例:-b  –number-nonblank 对非空输出行(非空行包括仅仅有空格的行)编号,注意:空行指的是该行没有任何内容,即连续2次敲击回车按钮形成的行。(即空行指的是没有任何内容的行,实际上该行仅仅有1个换行符(连续敲击2次回车形成),或者如果是最后一行,那么连换行符也没有(通过上一行敲击回车))
[root@iZ25ja2kaemZ ~]# cat -b  ./test.txt
     1  1
     2  2
     3  3
     4  4
     5  5
     6  $$$$
     7  6
     8  78
     9  8
    10  9$
    11  over

    12  222
    13  333
    14
    15  333

案例:-n   cat 加参数-n ,文件内容输出的同时,都会在所有行(包括空行和非空行)前面加上行号;
[root@iZ25ja2kaemZ ~]# cat -n  ./test.txt
     1  1
     2  2
     3  3
     4  4
     5  5
     6  $$$$
     7  6
     8  78
     9  8
    10  9$
    11  over
    12
    13  222
    14  333
    15
    16  333

 案例:查看./test.txt内容,并且在每行的结尾处附加$符号;

[root@iZ25ja2kaemZ ~]# cat -E  ./test.txt
1$
2$
3$
4$
5$
$$$$$
6$
78$
8$
9$$
over$
$
222$
333$
   $
333$

案例:cat 可以同时显示多个文件(即同时显示2,3,4,5等多个文件)的内容,比如我们可以在一个cat命令上同时显示两个文件test.txt,test1.txt的内容;

[root@iZ25ja2kaemZ ~]# cat ./test.txt  ./test1.txt    //亚强:注意第1-16行尾test.txt,第17行之后为test1.txt内容
1
2
3
4
5
$$$$
6
78
8
9$
over

222
333

333
a11
a22
a33
a44
案例:[root@iZ25ja2kaemZ ~]# cat -n ./test.txt ./test1.txt //亚强:注意第1-16行尾test.txt,第17行之后为test1.txt内容,可见cat会连续对2个或更多内容的文件进行编号。
     1  1
     2  2
     3  3
     4  4
     5  5
     6  $$$$
     7  6
     8  78
     9  8
    10  9$
    11  over
    12
    13  222
    14  333
    15
    16  333
    17  a11
    18  a22
    19  a33
    20  a44

案例:-s命令, –squeeze-blank 不输出多行空行,注意这里指的是如果有多个连续的空行,那么仅仅输出一个空行(空行指的是没有任何内容的行,实际上该仅仅有1个换行符,或者如果是最后一行,那么连换行符也没有),注意有空格不属于空行
 [root@iZ25ja2kaemZ ~]# cat -n ./ test5.txt //亚强:文件设计的时候4-6行仅仅存在空格符,10-13是空行。
cat: ./: Is a directory
     1  1
     2  2
     3  3
     4
     5
     6
     7  a
     8  b
     9  c
    10
    11
    12
    13
    14  d
    15  e
    16  f
[root@iZ25ja2kaemZ ~]# cat -ns ./ test5.txt//亚强:文件设计的时候4-6行仅仅存在空格符,10-13是空行。可见10-13行仅仅显示了一个空行。
cat: ./: Is a directory
     1  1
     2  2
     3  3
     4
     5
     6
     7  a
     8  b
     9  c
    10
    11  d
    12  e
    13  f
[root@iZ25ja2kaemZ ~]#

 

案例:cat 对于内容极大的文件来说,可以通过管道|传送到more 工具,然后一页一页的查看,即首先显示一页(当前可视范围)内容,然后按下一次enter就显示后面1行数据,注意这里一行指的是当前可是窗口显示一行,不是文件内容用换行符分割的行;

[root@iZ25ja2kaemZ ~]# cat  ./test1.txt | more
d54-a91a-6b8038852fce(2270):0.60″
string(154) “insert into questions (ques_id,papers_id,degree,type) values (‘e2ebec82-c962-4d54-a91a-6b8038852fce’,’89’,0.60,’解答题(共5小题,满分46分)’);”
resource(5) of type (mysql link)
string(15) “试题id:2271”
string(245) “初中数学试卷(1):华师大版(16):七年级上(129)::期末试题(14):页数-1:2011-2012学年四川省资阳市简阳市七年级(上)期末数学试卷(89,100,0.63):与几何语言训练:e6c275e0-3b1c-47aa-83c1-4671
b1132dcb(2271):0.67″
string(136) “insert into questions (ques_id,papers_id,degree,type) values (‘e6c275e0-3b1c-47aa-83c1-4671b1132dcb’,’89’,0.67,’与几何语言训练’);”
resource(5) of type (mysql link)
string(15) “试题id:2272”
string(269) “初中数学试卷(1):华师大版(16):七年级上(129)::期末试题(14):页数-1:2011-2012学年四川省资阳市简阳市七年级(上)期末数学试卷(89,100,0.63):填空,并在括号内注明说理依据.:b0500f0f-1d8
b-478d-98ba-b2dd5d550ce1(2272):0.50″
string(160) “insert into questions (ques_id,papers_id,degree,type) values (‘b0500f0f-1d8b-478d-98ba-b2dd5d550ce1′,’89’,0.50,’填空,并在括号内注明说理依据.’);”
resource(5) of type (mysql link)
float(1.5851311683655)
有一个符合题意,请把你认为符
合题意的一项选出来,并把其番号填在题后的括号内,每题3分,共30分)’);”
resource(5) of type (mysql link)
string(15) “试题id:2280”
string(434) “初中数学试卷(1):华师大版(16):七年级上(129)::期末试题(14):页数-1:201
4-2015学年四川省遂宁市蓬溪县大石中学七年级(上)期末数学模拟试卷(90,150,0.76):选
择题(下列各题给出的四个选项
,只有一个符合题意,请把你认为符合题意的一项选出来,并把其番号填在题后的括号内,
–more–

案例:[root@iZ25ja2kaemZ ~]# cat ./test3.txt ./test1.txt | more  //这里用管道显示多个文件,效果为显示完test3.txt后继续显示text1.txt
综合案例:用管道显示2个文件,并给内容按照换行符进行分割,输出行号。注意more所谓的输出行是按照输出屏幕可视范围的一行,与文件内容的一行数据不同(文件内容一行是按照回车符\n分割的)。

[root@iZ25ja2kaemZ ~]# cat -n ./test3.txt ./test1.txt | more
     1  d54-a91a-6b8038852fce(2270):0.60″
     2  string(154) “insert into questions (ques_id,papers_id,degree,type) values (‘e2ebec82-c962-4d54-a91a-6b8038852fce’,’89’,0.60,’解答题(共5小题,满分46分)’);”
     3  resource(5) of type (mysql link)
     4  string(15) “试题id:2271”
     5  string(245) “初中数学试卷(1):华师大版(16):七年级上(129)::期末试题(14):页数-1:2011-2012学年四川省资阳市简阳市七年级(上)期末数学试卷(89,100,0.63):与几何语言训练:e6c275e0-3b1c-47aa-8
3c1-4671
     6  b1132dcb(2271):0.67″
     7  string(136) “insert into questions (ques_id,papers_id,degree,type) values (‘e6c275e0-3b1c-47aa-83c1-4671b1132dcb’,’89’,0.67,’与几何语言训练’);”
     8  resource(5) of type (mysql link)
     9  string(15) “试题id:2272”
    10  string(269) “初中数学试卷(1):华师大版(16):七年级上(129)::期末试题(14):页数-1:2011-2012学年四川省资阳市简阳市七年级(上)期末数学试卷(89,100,0.63):填空,并在括号内注明说理依据.:b050
0f0f-1d8
    11  b-478d-98ba-b2dd5d550ce1(2272):0.50″
    12  string(160) “insert into questions (ques_id,papers_id,degree,type) values (‘b0500f0f-1d8b-478d-98ba-b2dd5d550ce1′,’89’,0.50,’填空,并在括号内注明说理依据.’);”
    13  resource(5) of type (mysql link)
    14  float(1.5851311683655)
    15  string(76) “//www.jyeoo.com/math/report/detail/f87560d6-f422-466f-8309-2c49d68c63ba
    16  string(18) “试卷分数:150”
    17  string(25) “试卷难度系数:0.76”
–more–
案例:cat有创建文件的功能,创建文件(>)后,要以EOF结束(好像也可以使用STOP结束,亚强测试不行),特别注意:如果创建的文件名在目的目录有重名文件,那么会重写该文件,覆盖掉源文件;

de>[root@localhost ~]# cat >  linuxsir.txt  << EOF        //创建文件linuxsir.txt,并进入编辑状态,<<EOF是进入编辑该文件的状态,方便使用EOF命令来保存并退出编辑状态。如果不用<<EOF,也会自动进入编辑状态,此时可以使用ctry+c来保存并退出该编辑状态。

> 我来测试 cat 创建文件,并且为文件输入内容;      // 注:这是为linuxsir.org.txt文件输入内容;
> 北南南北 测试;                   //注:这是为linuxsir.org.txt文件输入内容;
> EOF  // 注:保存并退出编辑状态;
[root@localhost ~]# cat linuxsirtxt  //注:我们查看一下linuxsir.org.txt文件的内容;
我来测试 cat 创建文件,并且为文件输入内容;
北南南北 测试;

案例:重写文件测试(即如果新建的目的文件已经存在于目的目录,那么会覆盖掉那个已经存在的文件内容):

[root@iZ25ja2kaemZ ~]# cat test5.txt
i love china!
i also like china!
and also like you!
[root@iZ25ja2kaemZ ~]# cat >test5.txt <<EOF
> HE
> EOF
[root@iZ25ja2kaemZ ~]# cat test5.txt  //可见,源文件被覆盖,然后被重写了。
HE
[root@iZ25ja2kaemZ ~]#

案例:cat 还有向已存在的文件追加(>>)内容的功能;

[root@iZ25ja2kaemZ ~]# cat > test5.txt <<EOF//新建文件内容
> i love china!
> EOF
[root@iZ25ja2kaemZ ~]# cat >> test5.txt <<EOF //查看给源文件追加内容,可以看到追加的内容会从源文件的基础上另起一行。
> i also like china!
> and also like you!
> EOF
[root@iZ25ja2kaemZ ~]# cat test5.txt  //查看源文件,可以看到追加了内容。
i love china!
i also like china!
and also like you!
[root@iZ25ja2kaemZ ~]#
案例:cat 连接多个文件的内容并且输出到一个新文件中,特别注意:如果目的文件(如此案例的ceshi4.txt)在目的目录已经存在该重名文件,那么该语句会重写该文件,即会覆盖掉源文件,这里亚强不再给出覆盖文件的测试案例。

[root@iZ25ja2kaemZ ~]# cat ceshi1.txt
hello china!
[root@iZ25ja2kaemZ ~]# cat ceshi2.txt
hello beijing!
[root@iZ25ja2kaemZ ~]# cat ceshi3.txt
hello chaoyang!
[root@iZ25ja2kaemZ ~]# cat ceshi1.txt ceshi2.txt ceshi3.txt > ceshi4.txt //将 ceshi1.txt ceshi2.txt ceshi3.txt 这3个文件链接起来并写入到文件ceshi4.txt,注意如果目的目录已经处在ceshi4.txt,那么ceshi4.txt文件会被重写。
[root@iZ25ja2kaemZ ~]# cat ceshi4.txt
hello china!
hello beijing!
hello chaoyang!

cat 把一个或多个已存在的文件内容,追加(>>)到一个已存在的文件中

[root@iZ25ja2kaemZ ~]# cat ceshi1.txt
hello china!
[root@iZ25ja2kaemZ ~]# cat ceshi2.txt
hello beijing!
[root@iZ25ja2kaemZ ~]# cat ceshi3.txt
love you!
[root@iZ25ja2kaemZ ~]# cat ceshi1.txt ceshi2.txt >>ceshi3.txt //亚强:这里讲ceshi1.txt,ceshi2.txt的内容追加到ceshi3.txt文件中。
[root@iZ25ja2kaemZ ~]# cat ceshi3.txt
love you!
hello china!
hello beijing!
案例:打印出非打印字符,如window编辑文档的\r\n,显示为^M

[root@iZ25sngm7hfZ wyq]# cat -v root.sh
#!/bin/bash^M
girl2='wd';^M
echo "see ${girl2}";^M
[root@iZ25sngm7hfZ wyq]# cat root.sh
#!/bin/bash
girl2='wd';
echo "see ${girl2}";
[root@iZ25sngm7hfZ wyq]#