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

sh/bash/dash/ksh/zsh等Shell脚本
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#31

帖子 aerofox » 2009-01-02 21:51

29 楼讲的也许是他的理由,没什么可说的。只是不理解那个“要加引号”,如果文件名要加引号,那么不管它放到 cat 后还是 grep 后都要加啊。
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

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

#32

帖子 goodluck1982 » 2009-01-03 14:52

没错!
加不加引号和用不用 cat 完全是两个问题
若不用cat需要加引号,那么用cat同样需要加引号
若用cat不需加引号,不用cat也同样不需加引号

我想这或许就是“知其然不知其所以然”造成的
不提倡盲目的使用cat也正是想避免这种情况

简单的模仿并修改他人的代码,最容易导致“知其然不知其所以然”了!
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京

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

#33

帖子 aBiNg » 2009-01-03 22:28

我通常 cat/more 多些。我从不低估每个人的潜能,所以对“新手”说教、提醒亦或建议之类,一直以为没什么必要。
但我从没听说过管道可以提高效率。管道产生子进程,shell 书上讲尽量少用管道,难道是单核时代的局限性?
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

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

#34

帖子 goodluck1982 » 2009-01-03 22:51

直接more就可以了,还要cat干什么?

我也没有低估谁的潜能,只是正确的学习过程(我依然坚持认为:学习grep,若一开始就是 cat file |grep xx,并非正确的过程)能更好更快的发挥其潜能

就好比小学生开始学算术,总是先认识数字,再认识加减法,再认识乘除法的。
如果一上来就教 2+3x4,显然不是正确的步骤

同样道理
对 cat file | grep xx
应该先学会 grep 怎么用: grep xx file
再认识 cat 的用法:cat file
然后是认识管道的作用: |
三者都了解了,才能真正懂得 cat file | grep xx 是怎么回事
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#35

帖子 aerofox » 2009-01-03 23:06

我也一直以为这是一些人的习惯使然,楼主发了这贴之后才发现还是有人认为用管道更好才那么用的,也有些认为一直用管道所以得找个用管道的理由:)
用管道与不用管道的自由就没什么可讨论的,在技术上还真想知道用管道是不是真有什么好处。我前面贴的测试结果只能代表一种情况,希望有人贴出不同的结果。

以前还见过不少人贴这样的代码:

代码: 全选

rm `ls *.bak`
我认为不如

代码: 全选

rm *.bak
直接,可就是有人认为后者有可能出现 too many arguments 的错误,而前者不会,我也就无话可说了。
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

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

#36

帖子 goodluck1982 » 2009-01-04 2:58

aerofox 写了:我也一直以为这是一些人的习惯使然,楼主发了这贴之后才发现还是有人认为用管道更好才那么用的,也有些认为一直用管道所以得找个用管道的理由:)
用管道与不用管道的自由就没什么可讨论的,在技术上还真想知道用管道是不是真有什么好处。我前面贴的测试结果只能代表一种情况,希望有人贴出不同的结果。

以前还见过不少人贴这样的代码:

代码: 全选

rm `ls *.bak`
我认为不如

代码: 全选

rm *.bak
直接,可就是有人认为后者有可能出现 too many arguments 的错误,而前者不会,我也就无话可说了。
使用 rm `ls *.bak`
不仅不会避免 too many arguments
而且还会导致新的问题,那就是如果文件名中有空格的时候
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#37

帖子 aerofox » 2009-01-04 12:21

goodluck1982 写了: 使用 rm `ls *.bak`
不仅不会避免 too many arguments
而且还会导致新的问题,那就是如果文件名中有空格的时候
没错。而且如果设置了 alias ls='ls -F',那还有可能误删除文件,因为 ls -F 会在可执行文件后加 *。
alenbull
帖子: 50
注册时间: 2007-10-31 17:00

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

#38

帖子 alenbull » 2009-01-10 15:22

楼主提的很好,这个和习惯的确有关系。但是写在脚本里,效果差别就明显体现 现出来了。大文件cat一下,再grep,可能要很长时间,但是直接grep会少个步骤,效率上明显的改观。
头像
HuaChong
帖子: 493
注册时间: 2006-09-12 17:10

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

#39

帖子 HuaChong » 2009-01-10 20:01

goodluck1982 写了:
greco 写了:只感觉语义比较清晰, cat 什么 然后 grep 什么
我觉得直接 grep什么 语意最清晰!
反而加了 cat什么 ,容易让人迷惑,这个cat到底是干什么地?
lz的怀疑批判的学习精神我很敬佩,我在看完这个链接,觉得你是对的。从时间的角度来考虑。
http://www.ibm.com/developerworks/cn/ai ... abits.html
这篇文章中有这么一段,停止对cat使用管道。
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

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

#40

帖子 goodluck1982 » 2009-01-10 22:00

多谢LS的支持! :em09

其实我发帖的出发点是:好多新手一开始就看到满眼的 cat .. | grep ...,根本不知道grep是可以直接用的!这对初学者是很不利的。
头像
hyxuzhimin
帖子: 249
注册时间: 2008-05-09 14:14

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

#41

帖子 hyxuzhimin » 2009-01-12 21:59

作为新手看了上面大侠们的讨论,真的感到醍醐灌顶啊。内容好像很简单,但是很有深意。 :em11
头像
syhan
帖子: 272
注册时间: 2006-09-06 12:24
来自: Southeast University

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

#42

帖子 syhan » 2009-02-06 15:52

考,有意义么,怎么就误导了,该rtfm的就该rtfm
awesome + stalonetrayer + urxvt + rox-filer + feh + SLiM
头像
JustinLei
帖子: 87
注册时间: 2005-09-20 14:29
来自: 弯弯的月亮

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

#43

帖子 JustinLei » 2009-02-16 17:00

acestrong
帖子: 4
注册时间: 2006-07-28 17:26

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

#44

帖子 acestrong » 2009-03-23 22:14

关于管道和多核的论断真是让我笑掉大牙了~~ :em04

管道的作用是将前一个进程的输出作为后一个进程的输入,那后一个进程必然要等到前一个进程执行完才会执行,怎么会并行执行呢?!

支持lz的质疑精神~~ :em01
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

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

#45

帖子 tusooa » 2010-09-13 22:20

比如,要输出行号:
dog -n xxx G yyy

代码: 全选

] ls -ld //
回复