1

破損したデータベースを再構築中です。この再構築の一部には、長さが約4語の文字列を検索するために作成した単純なbashスクリプトを介してgrepを使用することが含まれます。これによりファイルパスが返されます。これを直接headにパイプして、grepが検出したファイルの最初の数行を表示できるようにします。

ただし、runningsh search2.sh "these are some search terms"は正確に1つのファイルパスを返しますが、runningsh search2.sh "these are some search terms" | headはそのファイルに対してヘッドを実行しません。grepが返すファイルパスがスペースをエスケープしないことに気づきましたが、これがheadの問題になるかどうかはわかりません。次に何を試すべきか考えてみませんか?

4

2 に答える 2

3

これを試して:

head "$(search2.sh 'these are some search terms')"

これにより、引用符で囲まれていない空白の問題が解決するはずです...

于 2012-08-22T12:56:35.990 に答える
1

一部のデータをヘッドにパイプすると、データの最初の数行のみが表示されます。代わりに、headを呼び出して、見つかった各ファイルの先頭を表示します。これを行うには、コマンドラインパラメータとして行を使用してxargs呼び出すデータをパイプ処理します。head

sh search2.sh "these are some search terms" | xargs head

パス内のスペースを処理する場合は、ファイル名(-l)とゼロ区切りパス(-Z)のみを返すようにgrepに指示してから、xargsのスイッチを使用して-0ゼロ区切りパスを解析する必要があります。たとえば、「現在のディレクトリから再帰的にTEST"を実行headし、それらを呼び出します。

grep -lZR "TEST" . | xargs -0 head
于 2012-08-22T12:57:19.080 に答える