[chengmo@centos5 shell]$ (
sed -n
'1,$p'|
grep -n
'echo')<test.
sh
5:
echo "very good!";
7:
echo "good!";
9:
echo "pass!";
11:
echo "no pass!";
#这个脚本比较有意思了。由于前面是管道,后面需要把test.sh内容重定向到 sed ,然后sed输出通过管道,输入给grep.需要将前面用
"()"运算符括起来。在单括号内的命令,可以把它们看作一个象一个命令样。如果不加括号test.sh就是grep 的输入了。
#上面一个等同于这个
[chengmo@centos5 shell]$ sed -n
'1,$p'<test.
sh |
grep -n
'echo'
5:
echo "very good!";
7:
echo "good!";
9:
echo "pass!";
11:
echo "no pass!";
#重定向运算符,在shell命令解析前,首先检查的(一个命令,执行前一定检查好它的输入,输出,也就是0,1,
2 设备是否准备好),所以优先级会最高
[chengmo@centos5 shell]$ sed -n
'1,10p'<test.
sh |
grep -n
'echo' <testsh.
sh
10:
echo $total;
18:
echo $total;
21:
echo "ok";
#哈哈,这个grep又接受管道输入,又有testsh.sh输入,那是不是2个都接收呢。刚才说了"<"运算符会优先,管道还没有发送数据前,grep绑定了testsh.sh输入,这样sed命令输出就被抛弃了。这里一定要小心使用
(转载自http://www.cnblogs.com/chengmo/archive/2010/10/21/1856577.html)
转载于:https://www.cnblogs.com/byleaf/p/4346276.html