cat - concatenate files and print on the standard output
1 过滤器
何谓过滤器呢,例如cat,grep,wl 之类的命令就是过滤器了。这样的命令 读取数据,对数据执行一些操作,然后写入结果。更准确地说,过滤器就是任何能够从标准 输入读取 文本 数据,并向标准输出写入 文本 数据的命令。又因为Unix 的 KISS 设计理念,所以每个程序都被设计成能够出色完成一项特定任务的工具。又因为重定向和 管道的存在,使得可以将这些工具组合起来,发挥无穷威力
2 cat
在shell 里面运行cat,你会被要求输入文本数据,当你输入一行数据以后,然后按下回 车你输入的数据就会显示在屏幕,当你按下 ^D(<ctrl>+d),发送eof 信号给shell,退出 cat。cat 做的事就是把你输入的字符,复制到标准输出 (一般情况是指你的屏幕).看到 这里有人或许会质疑,这东西有什么用呢?似乎什么都作不了。不,它的用处很大呢, 且容笔者细细禀来
2.1 场景1
假如你要新建一个文本文件,里面只是很少的文本,你会怎么做呢?一般情况下,都是用 vim/emacs 新建一个文本文件,然后输入几行文字,然后保存退出。这是一般的做法, 看到这里,很自然有人会发问,难道有更优雅的解决方法?有,不用打开文本编辑器写入文本 的hacking方法:
|
|
输入数据,然后 ^D(<ctrl>+d) 保存。你就新建了一个文本了。当然,如果你已经有一个 data 文件 ,就会被代替,当然,你也可以也在原来文本末尾添加的方法:
|
|
2.2 场景2
如果你有一个短文件,你想查看一下,同样,你可以使用cat
|
|
当然,你也可以省略 < 这个重定向符号:
|
|
抑或是,你想显示某个大文件的最后一部分,你也可以如上操作。或许你会觉得,这个功能 很多命令也有,最典型的就是 tail. 但是如果 cat 可以很完美地很其他过滤器结合 充当整套管道线工具流的起始端,这个以后慢慢再阐述
2.3 场景3
如果你想复制文本文件,你首先会想起什么命令? cp,很自然嘛,我也不例外,但是cat 也可以实现同样的功能,很意外吧:
|
|
即把 file 复制到标准输出,然后再把 file 当作标准输入复制到 newfile.hacking!
2.4 场景4
如果你想把多个文本文件的组合到一个文件,你会怎么做?用编辑器打开所有的文件 然后 select,cut,paste,save.我也会很自然地想到这个方法,但是是否存在着更 优雅的解决方案呢?当然:
|
|
3 总结
上面已经介绍了挺多cat 的使用场景了,你觉得cat 表现滴怎么样呢?相信你的感觉是 还行,但是并没有,我吹嘘的那么令人惊艳。因为这只是cat 最基本的功能,它最大的 用法还没有完全展现出来,笔者先举一例,以后再慢慢详叙:
|
|
语法 | 用法 |
---|---|
cat > file | 读取输入,创建新的文件或替换 |
cat >>file | 读取输入,追加新的文件 |
cat file/cat <file | 显示一个已有文件 |
cat <oldfile> newfile | 复制一个文件 |
cat file1 file2 file3>file4 | 组合多个文件 |