没有关于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字符串的文件名列表。
我确定这只是分组,引用正确和/或在正确的位置重定向的问题,但经过大量的反复试验(并在此处搜索)我仍然没有得到任何地方。
有什么建议吗?
答案 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
)。我根本就没有“你不能使用理智,文明的外壳”规则的卡车。