0

对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 字符串的文件名列表。

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

有什么建议么?

4

1 回答 1

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、 the-i和 the {}。始终列出文件名的一个技巧是指定/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)。我根本不会有任何带有“你不能使用理智、文明的外壳”规则的卡车。

于 2013-04-16T06:51:42.143 回答