-1

ファイルの名前を出力するこのgrepコマンドがあります (これには、いくつかのパターンとの一致が含まれます)。これらのファイルをファイル解析プログラムで解析したいと考えています。パイプチェーンは次のようになります。

grep -rl "{some-pattern}" . | {some-file-parsing-program} > a.out

これらのファイル名をファイル解析プログラムへのコマンド ライン引数として取得するにはどうすればよいですか?

たとえばgrep、ファイル名ab、 を返すとしますc。実行しているかのようにファイル名を渡すにはどうすればよいですか

{some-file-parsing-program} a b c > a.out

?

4

2 に答える 2

9

あなたが望んでいるように私には見えますxargs

grep -rl "{some_pattern" . | xargs your-command > a.out

a.outが適切な出力ファイル名であるとは確信していませんが、それはスライドさせておきましょう。このxargsコマンドは、空白で区切られたファイル名を標準入力から読み取りyour-command、それらの名前を引数として呼び出します。your-command数回呼び出す必要がある場合があります。GNUxargsを使用していて を指定しない限り-ryour-command一致するファイル名がなくても、少なくとも 1 回は呼び出されます。

を使わなければ、この仕事にxargsは使えません。sedを使用せずxargsに使用awkするのは不器用です。Perl (および Python) はそれを「簡単に」管理できます。標準入力からファイル名を読み取り、各ファイルを順番に処理するコードを書くのは簡単です。

于 2013-06-23T02:32:38.260 に答える
0

標準入力から読み取れない Linux プログラムは知りません。-プログラムによっては、デフォルトの入力が stdin である場合もあれば、コマンド ライン オプションを使用して (多くの場合は単独で) stdin を使用するように指定する必要がある場合もあります。特に心掛けていることはありますか?

于 2013-06-23T02:23:36.533 に答える