0

cシェルについては選択の余地がありません。ここで使用するものです。

したがって、現在のディレクトリとすべてのサブディレクトリを解析して、ファイル内の特定のアカウント番号を探すために、それぞれ *.utv と egrep の形式のファイルを探します。

私はこのようなことを試しました:

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

しかし、"Too many words from `` " メッセージが表示されました。

どうやらegrepコマンドラインに返されるファイル名が多すぎるため、xargsを使用しています。

私がこれを行うとき:

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、 、-iを失います。{}リストされたファイル名を常に取得するための秘訣は/dev/null、名前として指定することですが、これ-lも仕事をします:

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

そして、C シェルはプログラミングに向いていないということを理解する必要があります。また、いつでもスクリプトに追加できexec /bin/bash -lます.login(または/bin/kshの代わりに使用できます/bin/bash)。「正気で文明化されたシェルを使用することはできません」というルールのトラックはありません。

于 2013-04-16T06:51:42.143 に答える