Linux -- cat、wc、tac

1. cat(concatenate)

一个文本文件查看和连接工具,查看一个文件的内容

命令选项

-n 或 --number:由 1 开始对所有输出的行数编号。

-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。

-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。

-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。

-E 或 --show-ends : 在每行结束处显示 $。

-T 或 --show-tabs: 将 TAB 字符显示为 ^I。

-A, --show-all:等价于 -vET。

-e:等价于"-vE"选项;

-t:等价于"-vT"选项

--help:显示此帮助信息并离开

实例

cat -n textfile1 > textfile2
注:把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里

cat -b textfile1 textfile2 >> textfile3
注:把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里

cat /dev/null > /etc/test.txt
注:清空 /etc/test.txt 文档内容

注:

dev/null:在类 Unix 系统中,/dev/null 称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个 EOF。

而使用 cat $filename > /dev/null 则不会得到任何信息,因为我们将本来该通过标准输出显示的文件信息重定向到了 /dev/null 中。

使用 cat $filename 1 > /dev/null 也会得到同样的效果,因为默认重定向的 1 就是标准输出。 如果你对 shell 脚本或者重定向比较熟悉的话,应该会联想到 2 ,也即标准错误输出。

如果我们不想看到错误输出呢?我们可以禁止标准错误 cat $badname 2 > /dev/null。

在 Linux shell 脚本中我们经常见到类似于cat << EOF的语句,不熟悉的童鞋可能觉得很奇怪:EOF好像是文件的结束符,用在这里起到什么作用?
EOF是“end of file”,表示文本结束符。
<<EOF
(内容)
EOF


首先必须要说明的是EOF在这里没有特殊的含义,你可以使用FOE或OOO等(当然也不限制在三个字符或大写字符)。
可以把EOF替换成其他东西,意思是把内容当作标准输入传给程序。
结合这两个标识,即可避免使用多行echo命令的方式,并实现多行输出的结果。


接下来,简单描述一下几种常见的使用方式及其作用:
1、cat<<EOF,以EOF输入字符为标准输入结束:
2、cat>filename,创建文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束:
注意:输入时是没有'>'的。(注:用到>符号时,这个符号是重定向的意思,会覆盖原来文件的内容,没有文件时会自动创建。如果用>>符号,即表示追加内容,不会覆盖原文件内容,只会在原文件内容下面追加你所输入的内容。)
3、cat>filename<<EOF,以EOF作为输入结束,和ctrl+d的作用一样。

4、如果在写shell脚本的时候,需要生成一个配置文件,但这配置文件带变量,这时就需要把EOF用单引号括起来,否则变量会被解析掉。而且在写脚本时,EOF后面不能带空格等其它符号,否则会出错。
比如在写脚本时,要求原本不动地把cat下的内容生成到脚本配置文件中,如果EOF不用单引号引起来,就会使下面的${VIP}等变量被解析掉,就造成生成一个错误的配置文件了。

下面这个脚本是我需要在生成配置文件时,在cat时去解析变量,这样则不需要使用单引号引起来。

简单例子,以下是写的shell脚本内容:

上面cat是生成linux_cat1.txt文件,下面cat是生成linux_cat2.txt文件。

 

执行完脚本后,我们cat查看这二个文件。

 

eg1.

# cat << EOF > test.sh
> #!/bin/bash             #“shell脚本”
> #you Shell script writes here.
> EOF

结果:
引用# cat test.sh
#!/bin/bash
#you Shell script writes here.

可以看到,test.sh的内容就是cat生成的内容。
cat <<EOF >test.sh  内容 EOF 
---就是将内容写入test.sh,之前存在的内容会被覆盖掉。EOF可以换成其他符号比如EEE:cat <<EEE  >test.sh  内容 EEE

eg2.

// 追加文件,将内容追加到 test.sh 的后面,不会覆盖掉原有的内容。
# cat << EOF >> test.sh  内容  EOF

换一种写法

# cat > test.sh << EOF 内容  EOF

注:EOF只是标识,不是固定的。
# cat << HHH > iii.txt
> sdlkfjksl
> sdkjflk
> asdlfj
> HHH
这里的“HHH”就代替了“EOF”的功能。结果是相同的。
引用# cat iii.txt
sdlkfjksl
sdkjflk
asdlfj

*** 在非脚本中,
如果不是在脚本中,我们可以用Ctrl-D输出EOF的标识
# cat > iii.txt
skldjfklj
sdkfjkl
kljkljklj
kljlk
Ctrl-D

结果:
引用# cat iii.txt
skldjfklj
sdkfjkl
kljkljklj
kljlk

※关于“>”、“>>”、“<”、“<<”等的意思,可自行查看bash的介绍。

2. wc

统计给定文件中的字节数、字数、行数。

如果没有给出文件名,则从标准输入读取。

wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。

命令选项

  - c 统计字节数。

  - l 统计行数。

  - w 统计字数。

这些选项可以组合使用。

输出列的顺序和数目不受选项的顺序和数目的影响。

总是按下述顺序显示并且每项最多一列。

行数、字数、字节数、文件名

如果命令行中没有文件名,则输出中不出现文件名。

$ wc - lcw file1 file2
4 33 file1
7 52 file2
11 11 85 total

实例

1.统计demo目录下,js文件数量:

find demo/ -name "*.js" |wc -l

2.统计demo目录下所有js文件代码行数:

find demo/ -name "*.js" |xargs cat|wc -l 或 wc -l `find ./ -name "*.js"`|tail -n1

3.统计demo目录下所有js文件代码行数,过滤了空行:

find /demo -name "*.js" |xargs cat|grep -v ^$|wc -l

3. tac

反向连接文件(不太常用)

参考:

linux tac命令_Linux tac命令入门_cumo3681的博客-CSDN博客

Getting started with the Linux tac command | Opensource.com

Have Fun

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值