分页: 1 / 5

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

发表于 : 2008-12-24 14:58
goodluck1982
经常在这里看到这样使用 grep、sed等
就是先 cat 一下,再用管道传给 grep 等
比如
cat xxx | grep yyy
cat xxx | sed yyy
……

我在想,为什么要这样做?
既然完全可以直接使用,比如
grep yyy xxx
sed yyy xxx
为什么要先 cat 一下呢?
使用cat比不用cat有什么好处吗?
如果没有任何好处的话,那真是多此一举,太令人费解了!

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

发表于 : 2008-12-24 15:05
xiooli
个人习惯问题。

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

发表于 : 2008-12-24 15:41
eexpress
有些差异的。
具体归纳不会,只是碰到过。管道后,正常得多。

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

发表于 : 2008-12-24 16:20
goodluck1982
eexpress 写了:有些差异的。
具体归纳不会,只是碰到过。管道后,正常得多。
请举个例子

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

发表于 : 2008-12-24 16:25
goodluck1982
xiooli 写了:个人习惯问题。
如果只是习惯的问题的话
这不能说是个好的习惯
因为有比这更为简洁、更为直接且更为标准的使用方法
而且容易误导新手,让他们以为 grep 就是这么用的呢~~~~~~~~

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

发表于 : 2008-12-24 23:11
aerofox
我一般能不用管道就不用管理,少打几个字符总是省点力气。
楼主举的两个例子没看出有用管道的必要。

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

发表于 : 2008-12-25 9:37
goodluck1982
aerofox 写了:我一般能不用管道就不用管理,少打几个字符总是省点力气。
楼主举的两个例子没看出有用管道的必要。
我就觉得吧,完全没有必要!

如果在某些情况下却有必要的话,我想知道在什么情况下有必要

那些经常配合cat+管道用的大侠们,给个例子说明一下必要性啊

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

发表于 : 2008-12-25 10:12
eexpress
太久了,例子不记得了。反正管道可能过滤了某些控制代码。另外,有可能是grep sed这些打开文件,使用的函数可能有差异,导致某些编码方面的强壮性不足。

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

发表于 : 2008-12-25 10:51
goodluck1982
eexpress 写了:太久了,例子不记得了。反正管道可能过滤了某些控制代码。另外,有可能是grep sed这些打开文件,使用的函数可能有差异,导致某些编码方面的强壮性不足。
没有例子没法说明问题的

用了这么多年了,反正我是从没有遇到过不用管道就不行的时候

而且如你所说,假设“管道可能过滤了某些控制代码”,那么说经过管道处理有可能已经不再是原来的文件了
反而背离了最初的目的:在某个文件中搜索某个pattern(因为文件可能变了)

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

发表于 : 2008-12-26 6:12
aerofox
管道是不会做过滤的,有些程序倒是会区别对待终端IO和文件IO,可能有更多的程序采用不同的方法处理标准输入和命令行参数指定的文件,但真的没有发现grep、sed、awk这些常用程序有什么针对标准输入的特别处理,也没有发现cat对文件有什么过滤作用,所以我仍然至少这几个命令不用用管道,即使不喜欢用命令行参数,改为<改向也可以少打几个字符:)。

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

发表于 : 2008-12-26 8:33
greco
只感觉语义比较清晰, cat 什么 然后 grep 什么

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

发表于 : 2008-12-26 8:35
greco
再回复一下,貌似讨论这个没什么意义 :em02

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

发表于 : 2008-12-26 8:46
eexpress
也是,仅对cat情况讨论没什么意义。
等大家自己写的常用脚本,到几十个以后,再说吧。
我随便搜索了下,cat单个文件的情况,其实很少。而不cat,出异常结果的是肯定碰过的。

代码: 全选

cat i.html|enconv|tr '\n' '.'|tr '\r' '.'|sed 's/<a href="/\n/g'|sed 's/<\/span>/\n/g'|grep Date|sed 's/target.*Date//g'|sed 's/"[^"]*"/>/g'|egrep $1>>j.html
cat *.lst|sed s/l,[0-9][^l]*$/l/g|sed s/^s[^,]*,//|tr , '\n'|sed s/^/http:\\/\\/www.*\\/bbs\\//>$NOW.list
cat /home/exp/.ccdd.list|while read i; do echo "$l: $i"; (( l++ )); done

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

发表于 : 2008-12-26 9:05
goodluck1982
eexpress 写了:也是,仅对cat情况讨论没什么意义。
等大家自己写的常用脚本,到几十个以后,再说吧。
我随便搜索了下,cat单个文件的情况,其实很少。而不cat,出异常结果的是肯定碰过的。

代码: 全选

cat i.html|enconv|tr '\n' '.'|tr '\r' '.'|sed 's/<a href="/\n/g'|sed 's/<\/span>/\n/g'|grep Date|sed 's/target.*Date//g'|sed 's/"[^"]*"/>/g'|egrep $1>>j.html
cat *.lst|sed s/l,[0-9][^l]*$/l/g|sed s/^s[^,]*,//|tr , '\n'|sed s/^/http:\\/\\/www.*\\/bbs\\//>$NOW.list
cat /home/exp/.ccdd.list|while read i; do echo "$l: $i"; (( l++ )); done
您总是“肯定”碰到过
却把这么重要的例子给忘了
如何令人信服?

另,这是我的 ~/bin 目录,下面除了链接以外,绝大部分都是我自己写的脚本
(个别是网上找到的),当然,大部分比较简单,但附杂的同样有
shot.png

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

发表于 : 2008-12-26 9:14
goodluck1982
greco 写了:只感觉语义比较清晰, cat 什么 然后 grep 什么
我觉得直接 grep什么 语意最清晰!
反而加了 cat什么 ,容易让人迷惑,这个cat到底是干什么地?