为什么要使用 cat + grep、sed、awk、……

sh/bash/dash/ksh/zsh等Shell脚本
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

Re: 为什么要使用 cat + grep、sed、awk、……

#46

帖子 trigger » 2010-09-14 10:27

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

Re: 为什么要使用 cat + grep、sed、awk、……

#47

帖子 HuaChong » 2010-09-17 12:16

goodluck1982 写了:多谢LS的支持! :em09

其实我发帖的出发点是:好多新手一开始就看到满眼的 cat .. | grep ...,根本不知道grep是可以直接用的!这对初学者是很不利的。
呵呵,好久了, :em11
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 为什么要使用 cat + grep、sed、awk、……

#48

帖子 tusooa » 2010-09-17 16:41

其实吾跟倾向于用重定向。感觉,重定向,可以更省时间。
g xxx < yyy

代码: 全选

] ls -ld //
maozhx
帖子: 14
注册时间: 2009-09-19 18:17

Re: 为什么要使用 cat + grep、sed、awk、……

#49

帖子 maozhx » 2010-09-18 11:50

cat可以做些预处理,比如加上行号什么的,有不少参数很实用。
不同的工具可以完成相同的工作,个人喜好也有关系吧
头像
adam8157
帖子: 2794
注册时间: 2009-03-05 16:31
联系:

Re: 为什么要使用 cat + grep、sed、awk、……

#50

帖子 adam8157 » 2010-09-18 23:13

我用grep从来都是跟在管道后面, 所以, 懒得记其它用法...

*nix下每个命令都有太多的参数, 我选择不全记, 只要能达到我的目的就行...
ofan
帖子: 64
注册时间: 2008-09-15 11:55

Re: 为什么要使用 cat + grep、sed、awk、……

#51

帖子 ofan » 2010-09-21 20:18

lz都好久没来了,等回来了再发表观点.. XD
头像
pityonline
帖子: 3864
注册时间: 2008-12-09 12:44
来自: 北京
联系:

Re: 为什么要使用 cat + grep、sed、awk、……

#52

帖子 pityonline » 2010-10-09 21:28

学习了,尽管不太明白……
Pity is the bomp!
活着就是折腾!生命不息,折腾不止!
看这帮家伙在干什么?@pityonline/u
Dropbox+Vps+PC 跑起来了!这是邀请链接
头像
xrfang
帖子: 1116
注册时间: 2006-12-08 10:21

Re: 为什么要使用 cat + grep、sed、awk、……

#53

帖子 xrfang » 2010-10-11 0:05

goodluck1982 写了:
greco 写了:只感觉语义比较清晰, cat 什么 然后 grep 什么
我觉得直接 grep什么 语意最清晰!
反而加了 cat什么 ,容易让人迷惑,这个cat到底是干什么地?
这是一个逻辑习惯,比如ls、ps等命令习惯上用管道和grep链接。cat也这么用了。这样对脑子记忆命令有好处。这是合法的理由吧。
你爱用不用,没人逼你用--这就是Free的定义?
不,请自重,不要玷污Linux文化。
头像
xrfang
帖子: 1116
注册时间: 2006-12-08 10:21

Re: 为什么要使用 cat + grep、sed、awk、……

#54

帖子 xrfang » 2010-10-11 0:10

goodluck1982 写了:我以前也是用 wq 的
但自从知道了 x 后
就很少再用 wq 了
我比较追求简洁的东西

而且即使是在脚本里用grep,cat+管道所带来的效率提升
对最常见的任务来说也是完全可以忽略的
这个说是个人习惯你就不服气,硬说别人的习惯是不好的。 :em05

脑子里少记忆一点东西绝对是简洁的一个方面。看每个人的思维习惯了。你说少打一个字母就是“简洁“? :em20
你爱用不用,没人逼你用--这就是Free的定义?
不,请自重,不要玷污Linux文化。
ofan
帖子: 64
注册时间: 2008-09-15 11:55

Re: 为什么要使用 cat + grep、sed、awk、……

#55

帖子 ofan » 2010-10-17 13:15

个人的一点理解

用管道的理由:
并不是所有命令都接受文件输入,但是只要某个程序支持标准输入输出就能使用管道(不支持标准输入输出但支持利用参数指定文件也可以使用管道),它几乎能让任意两个程序进行沟通,这很方便!
对程序员来说,处理标准输入输出(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
我们可以wget一个远程主机上的文件,将内容输出到标准输出,这样就可以通过管道来给程序传递远程主机上的文件内容。这样使用起来就很灵活了。

不用管道的理由:
不用新建process,省掉了部分资源开销(但是这个开销实际上只有装载的开销)

另外,用管道并不是等前个命令执行完毕后再传给后面的命令,这很好理解,如果cat一个1G的文件,难道要全部保存在内存里再输入到其他程序?? 如果这样,效率将异常底下,实际上管道里只要有输入了,后面的程序就会读取并处理(当然两这个操作不能同时执行,写入时管道会被锁住,写入完毕后解锁,读取也是一样,这属于进程同步的范畴了)。
alenbull
帖子: 50
注册时间: 2007-10-31 17:00

Re: 为什么要使用 cat + grep、sed、awk、……

#56

帖子 alenbull » 2010-10-18 10:33

这个习惯的确不好,但是ee说的差别也是存在的。我以前也遇到过,具体问题具体分析吧。
baby
帖子: 641
注册时间: 2005-11-10 19:12

Re: 为什么要使用 cat + grep、sed、awk、……

#57

帖子 baby » 2010-10-18 11:57

学习了,长久下来习惯了用吸管吃饭
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 为什么要使用 cat + grep、sed、awk、……

#58

帖子 自由建客 » 2010-10-19 23:34

<、<<、cat 转文件为流所必须,>、>> 转流为文件所必须,tee 分流所必须,| 导流所必须……众过滤器则在川流之间,各司其职无可替代。
grep 本就以其过滤器身份登场,初识 grep 只知其流处理能力,不知其能处理文件,转文件为流再传之,很是自然。
cat file | grep key 中规中矩,grep key file 巧用其器。两种对比,习惯任何一种都无所谓好坏,只要不误事便无可非议!常常偏激地否定某种习惯才是很不好的思维习惯!
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: 为什么要使用 cat + grep、sed、awk、……

#59

帖子 风间星魂 » 2010-10-29 2:55

还有。
单个文件不要cat xxx | less

直接less xxx。我当初也是被先人的cat xxx | xxx误导了好久 :em20


cat我的理解还是用来合并多个文本的 :em06
头像
退避九舍
帖子: 742
注册时间: 2010-08-08 20:02
系统: Ubuntu 22.04

Re: 为什么要使用 cat + grep、sed、awk、……

#60

帖子 退避九舍 » 2010-12-07 22:53

:em06 :em06
退避九舍:富贵不能淫,贫贱不能移,威武不能屈:坚持ubuntu不动摇!
回复