为什么要使用 cat + grep、sed、awk、……
- trigger
- 帖子: 1604
- 注册时间: 2006-10-25 18:08
Re: 为什么要使用 cat + grep、sed、awk、……
我遇到过一个人,他的unix服务器很陈旧,缺少很多有用的工具,想把一个文本去掉行尾的^M,这时候就用到管道了
cat -v file|sed 's/\^M//g'
cat -v file|sed 's/\^M//g'
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
- HuaChong
- 帖子: 493
- 注册时间: 2006-09-12 17:10
Re: 为什么要使用 cat + grep、sed、awk、……
呵呵,好久了,goodluck1982 写了:多谢LS的支持!![]()
其实我发帖的出发点是:好多新手一开始就看到满眼的 cat .. | grep ...,根本不知道grep是可以直接用的!这对初学者是很不利的。

-
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
- 联系:
-
- 帖子: 14
- 注册时间: 2009-09-19 18:17
Re: 为什么要使用 cat + grep、sed、awk、……
cat可以做些预处理,比如加上行号什么的,有不少参数很实用。
不同的工具可以完成相同的工作,个人喜好也有关系吧
不同的工具可以完成相同的工作,个人喜好也有关系吧
- adam8157
- 帖子: 2794
- 注册时间: 2009-03-05 16:31
- 联系:
Re: 为什么要使用 cat + grep、sed、awk、……
我用grep从来都是跟在管道后面, 所以, 懒得记其它用法...
*nix下每个命令都有太多的参数, 我选择不全记, 只要能达到我的目的就行...
*nix下每个命令都有太多的参数, 我选择不全记, 只要能达到我的目的就行...
-
- 帖子: 64
- 注册时间: 2008-09-15 11:55
Re: 为什么要使用 cat + grep、sed、awk、……
lz都好久没来了,等回来了再发表观点.. XD
- pityonline
- 帖子: 3864
- 注册时间: 2008-12-09 12:44
- 来自: 北京
- 联系:
Re: 为什么要使用 cat + grep、sed、awk、……
学习了,尽管不太明白……
- xrfang
- 帖子: 1116
- 注册时间: 2006-12-08 10:21
Re: 为什么要使用 cat + grep、sed、awk、……
这是一个逻辑习惯,比如ls、ps等命令习惯上用管道和grep链接。cat也这么用了。这样对脑子记忆命令有好处。这是合法的理由吧。goodluck1982 写了:我觉得直接 grep什么 语意最清晰!greco 写了:只感觉语义比较清晰, cat 什么 然后 grep 什么
反而加了 cat什么 ,容易让人迷惑,这个cat到底是干什么地?
你爱用不用,没人逼你用--这就是Free的定义?
不,请自重,不要玷污Linux文化。
不,请自重,不要玷污Linux文化。
- xrfang
- 帖子: 1116
- 注册时间: 2006-12-08 10:21
Re: 为什么要使用 cat + grep、sed、awk、……
这个说是个人习惯你就不服气,硬说别人的习惯是不好的。goodluck1982 写了:我以前也是用 wq 的
但自从知道了 x 后
就很少再用 wq 了
我比较追求简洁的东西
而且即使是在脚本里用grep,cat+管道所带来的效率提升
对最常见的任务来说也是完全可以忽略的

脑子里少记忆一点东西绝对是简洁的一个方面。看每个人的思维习惯了。你说少打一个字母就是“简洁“?

你爱用不用,没人逼你用--这就是Free的定义?
不,请自重,不要玷污Linux文化。
不,请自重,不要玷污Linux文化。
-
- 帖子: 64
- 注册时间: 2008-09-15 11:55
Re: 为什么要使用 cat + grep、sed、awk、……
个人的一点理解
用管道的理由:
并不是所有命令都接受文件输入,但是只要某个程序支持标准输入输出就能使用管道(不支持标准输入输出但支持利用参数指定文件也可以使用管道),它几乎能让任意两个程序进行沟通,这很方便!
对程序员来说,处理标准输入输出(stdin,stdout)更熟悉也更方便,当然也可以用freopen()之类的方法重定向一下,之后用处理stdin和stdout相同的函数,但是在看不到上下文的情况下,比较容易搞混
另外从命令上来说,cat xxx | grep yyy 语义非常明确,将cat xxx的输出 作为 grep yyy 的输入,而grep yyy xxx 则没那么明确了,你需要对程序参数的顺序非常清楚才可以,可惜程序参数顺序是没有任何标准的(有些大家都爱用的习惯或者规则,但并不是所有程序员都爱遵守规则XD),有的files参数在options之后,而有的可以在前。而且处理程序参数是个dirty job...
另外,还有个灰常NB的应用,我们可以wget一个远程主机上的文件,将内容输出到标准输出,这样就可以通过管道来给程序传递远程主机上的文件内容。这样使用起来就很灵活了。
不用管道的理由:
不用新建process,省掉了部分资源开销(但是这个开销实际上只有装载的开销)
另外,用管道并不是等前个命令执行完毕后再传给后面的命令,这很好理解,如果cat一个1G的文件,难道要全部保存在内存里再输入到其他程序?? 如果这样,效率将异常底下,实际上管道里只要有输入了,后面的程序就会读取并处理(当然两这个操作不能同时执行,写入时管道会被锁住,写入完毕后解锁,读取也是一样,这属于进程同步的范畴了)。
用管道的理由:
并不是所有命令都接受文件输入,但是只要某个程序支持标准输入输出就能使用管道(不支持标准输入输出但支持利用参数指定文件也可以使用管道),它几乎能让任意两个程序进行沟通,这很方便!
对程序员来说,处理标准输入输出(stdin,stdout)更熟悉也更方便,当然也可以用freopen()之类的方法重定向一下,之后用处理stdin和stdout相同的函数,但是在看不到上下文的情况下,比较容易搞混
另外从命令上来说,cat xxx | grep yyy 语义非常明确,将cat xxx的输出 作为 grep yyy 的输入,而grep yyy xxx 则没那么明确了,你需要对程序参数的顺序非常清楚才可以,可惜程序参数顺序是没有任何标准的(有些大家都爱用的习惯或者规则,但并不是所有程序员都爱遵守规则XD),有的files参数在options之后,而有的可以在前。而且处理程序参数是个dirty job...
另外,还有个灰常NB的应用,
代码: 全选
$ wget baidu.com -q -O /dev/stdout | grep -i baidu.com
不用管道的理由:
不用新建process,省掉了部分资源开销(但是这个开销实际上只有装载的开销)
另外,用管道并不是等前个命令执行完毕后再传给后面的命令,这很好理解,如果cat一个1G的文件,难道要全部保存在内存里再输入到其他程序?? 如果这样,效率将异常底下,实际上管道里只要有输入了,后面的程序就会读取并处理(当然两这个操作不能同时执行,写入时管道会被锁住,写入完毕后解锁,读取也是一样,这属于进程同步的范畴了)。
-
- 帖子: 50
- 注册时间: 2007-10-31 17:00
Re: 为什么要使用 cat + grep、sed、awk、……
这个习惯的确不好,但是ee说的差别也是存在的。我以前也遇到过,具体问题具体分析吧。
-
- 帖子: 641
- 注册时间: 2005-11-10 19:12
Re: 为什么要使用 cat + grep、sed、awk、……
学习了,长久下来习惯了用吸管吃饭
- 自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
Re: 为什么要使用 cat + grep、sed、awk、……
<、<<、cat 转文件为流所必须,>、>> 转流为文件所必须,tee 分流所必须,| 导流所必须……众过滤器则在川流之间,各司其职无可替代。
grep 本就以其过滤器身份登场,初识 grep 只知其流处理能力,不知其能处理文件,转文件为流再传之,很是自然。
cat file | grep key 中规中矩,grep key file 巧用其器。两种对比,习惯任何一种都无所谓好坏,只要不误事便无可非议!常常偏激地否定某种习惯才是很不好的思维习惯!
grep 本就以其过滤器身份登场,初识 grep 只知其流处理能力,不知其能处理文件,转文件为流再传之,很是自然。
cat file | grep key 中规中矩,grep key file 巧用其器。两种对比,习惯任何一种都无所谓好坏,只要不误事便无可非议!常常偏激地否定某种习惯才是很不好的思维习惯!
-
- 帖子: 490
- 注册时间: 2009-06-20 23:53
Re: 为什么要使用 cat + grep、sed、awk、……
还有。
单个文件不要cat xxx | less
直接less xxx。我当初也是被先人的cat xxx | xxx误导了好久
cat我的理解还是用来合并多个文本的
单个文件不要cat xxx | less
直接less xxx。我当初也是被先人的cat xxx | xxx误导了好久

cat我的理解还是用来合并多个文本的

- 退避九舍
- 帖子: 742
- 注册时间: 2010-08-08 20:02
- 系统: Ubuntu 22.04