2013-04-16 59 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