Solaris unix,c-shell,重定向xargs执行命令输出

时间:2013-04-16 06:37:59

标签: unix redirect solaris xargs

没有关于c-shell的选择。这就是我们在这里使用的。

所以我想解析当前目录和所有子目录,寻找* .utv和egrep形式的文件,以便在文件中查找特定的帐号。

我试过这样的事情:

egrep -l "ACCOUNT NO: +700 " `find . -name "*.utv" ` | more   

但得到了“”“消息中的单词太多。

所以使用xargs因为显然我将太多的文件名传递回egrep命令行。

当我这样做时:

find . -name "*.utv" | xargs -n1 egrep -i -l '"ACCOUNT NO: +700 "' {} >&! /home/me/output.txt

“ps -ef”命令显示:

% ps -ef | egrep -i "myuserid"  
myuserid 20791 22549   0 18:19:38 pts/20      0:00 find . -name *.utv  
myuserid 20792 22549   0 18:19:38 pts/20      0:00 xargs -n1 egrep -i -l "ACCOUNT NO: +700 "  
myuserid 22774 20792   1 18:21:13 pts/20      0:04 egrep -i -l "ACCOUNT NO: +700 " ./01/130104_reportfile.utv  
%

但是我在“output.txt”文件中没有输出。

如果我在同一目录中手动运行egrep部分,我会得到一个包含700字符串的文件名列表。

我确定这只是分组,引用正确和/或在正确的位置重定向的问题,但经过大量的反复试验(并在此处搜索)我仍然没有得到任何地方。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您只需要在搜索周围使用单引号或双引号(但不能同时包含两者),就像在原始命令中一样:

find . -name "*.utv" | xargs -n1 egrep -i -l "ACCOUNT NO: +700 " {} >&! /home/me/output.txt
find . -name "*.utv" | xargs -n1 egrep -i -l 'ACCOUNT NO: +700 ' {} >&! /home/me/output.txt

我也会从命令行中丢失-n1-i{}。始终获取文件名的技巧是指定/dev/null作为名称,但-l也可以完成工作:

find . -name "*.utv" | xargs egrep -l 'ACCOUNT NO: +700 ' >&! /home/me/output.txt

你需要启发那些C shell不适合编程的能力。您始终可以将exec /bin/bash -l添加到.login脚本中(或使用/bin/ksh代替/bin/bash)。我根本就没有“你不能使用理智,文明的外壳”规则的卡车。