2013-04-16 60 views
0

没有关于c-shell的选择。这是我们在这里使用的。Solaris unix,c-shell,重定向xargs执行命令输出

所以我想通过当前目录和所有子目录来查找每个文件的形式* .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

你只需要单引号或双引号(但不能同时)四处搜寻,在原来的命令:

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)。我根本不会有任何卡车与“你不能使用一个理智,文明的外壳”的规则。

+0

大声笑...谢谢你,非常感谢! – user2285103