2017-02-27 2 views
0

私のUNIXはかなり錆びているが、私が望むのは、UNIXの場所を "generate"と "process"のテキストに2つの別々の単語が含まれているファイルを検索することだ。同じ行ですか?テキストに2つの別々の単語を含むファイルを見つける

私は、スクリプトの作成者とその機能の詳細をスクリプトの先頭に記載したスクリプトファイルがあることを知っています。たとえば、そのようなスクリプトの開始には次のものが含まれます。

機能:生成販売残業プロセスは

私はあるほしい何次(再び私のUNIXが錆びている)

grep -rwl . -e "generate" | "process" 

をしかし、これはエラーを与えるように認識されていないコマンド

のようなものを試してみました進捗状況ファイルのリスト。

salesovertime1.p

salestravel1.p

salesexpenses1.p

salesexpenses2.p

+0

あなたは 'grep'のどのバージョンを持っていますか? 'grep --version'を出力してここに貼り付けることができますか? – Inian

+0

また、あなたの入力と正確な出力を得るために、あなたの要件を適切な例で掲示することができますか? – Inian

+0

@Inianできるだけ多くの情報を追加しました。 Grepのバージョンを見つける方法はわかりませんが、Solaris 10を実行していると思います。 – AJF

答えて

0

あなたがファイルを検索する場合は、findが適切である、とあなたはgrepでフィルタリングすることができます。

find . -exec grep -H generate {} \; 2> /dev/null | grep process 

は、すべてのファイルフォームを現在のディレクトリに再帰的に検索し、単語 "generate"を含むものとフィルタ "word"を含むものをフィルタリングします。ファイル名は出力時にオプション-H(GNU grep)で生成され、エラーメッセージは/dev/nullにリダイレクトされます。

今、あなたはファイル名のみをしたい場合は、あなたが使用することができます。

find . -exec grep -H generate {} \; 2> /dev/null | grep process | cut -f1 -d\: 

あなたは「生成」と同じファイル内で「プロセス」が、異なる行にしたい場合は、次のようにそれを行います。

grep process `find . -exec grep -H generate {} \; 2> /dev/null | cut -f1 -d\:` 2> /dev/null | cut -f1 -d\: 

findは、grepに対して使用されるファイルリストを生成し、リダイレクトエラーでファイル名を再度抽出します。

+1

エラーをリダイレクトするのではなく、おそらく' find。 -type f -exec ... 'となります。アクセス権の問題についてはエラーメッセージが表示されますが、ディレクトリのエラーは削除されます。 –

+0

両方のミックス...ありがとう –

+0

@ Jean-BaptisteYunèsこのJeanに感謝します - 私は私の元の質問で、私は同じ行に両方の単語を持っているファイルを探していたはずです! – AJF

関連する問題