我想知道下面两个命令之间的区别,我明白2)应该使用,但我想知道1)和2)中发生的确切顺序
假设文件名中包含200个字符 @H_404_2@1)cat filename | grep regex @H_404_2@2)grep正则表达式文件名
假设文件名中包含200个字符 @H_404_2@1)cat filename | grep regex @H_404_2@2)grep正则表达式文件名
在功能上(就输出而言),这两者是相同的.第一个实际上创建了一个单独的进程cat,它只是将文件的内容发送到标准输出,它显示在grep的标准输入上,因为shell已经用管道连接了两者.
@H_404_2@从这个意义上讲,grep regex< filename也是等效的,但只需少一个进程. 当grep使用额外信息(文件名)时,您将开始看到差异在于变体,例如:
grep -n regex filename1 filename2@H_404_2@它与之间的区别:
cat filename1 filename2 | grep -n regex@H_404_2@是前者知道单个文件,而后者将其视为一个文件(没有名称). @H_404_2@前者可能会给你:
filename1:7:line with regex in 10-line file filename2:2:another regex line@H_404_2@后者更像是:
7:line with regex in 10-line file 12:another regex line@H_404_2@另一个可执行文件,如果它知道文件名是不同的,那就是wc,单词计数器程序:
$cat qq.in 1 2 3 $wc -l qq.in # knows file so prints it 3 qq.in $cat qq.in | wc -l # does not know file 3 $wc -l <qq.in # also does not know file 3