2009-08-13 5 views
2

私は一般にgrepの代わりにperl one linersを使ってファイルを検索します。例えば処理中のファイルの名前をPerlのワンライナーで印刷するにはどうすればよいですか?

#include <stdio.h>

perl -ne "print if(/#include\s*[\"<]stdio.h/)" */*.[ch] 

を含むすべての場所のプリントを以下しかし、私はこれらの行を持って、ファイル名を印刷する方法を見つけることができませんでした。私は$ARGV[0]を印刷しようとしましたが、無駄です。

このような行を含むファイル名はどうやって印刷しますか?

+1

grepを使用してください。そして、あなたの問題は消える(grep -l) –

+0

@depeszもっと複雑なことが必要になるまで、それは消えてしまいます。 –

+1

私の答えを取り消す:$ _は、引用符などにもかかわらず、シェルによって解釈されています。echo $ _:varには最後のコマンドの2番目の部分が含まれています。必須。 –

答えて

4

$ARGVは、現在読み取られているファイルの名前の特殊変数です。私はあなたが必要とするものだと信じています。

私が知っている、私は:-P

4

は、それはgrepのための(perlで書かれた)素敵な代替品です*ARGVが開かれているファイルの名前は、の最初の要素である$ARGV[0]ではなく、$ARGVです。

print "$ARGV: $_" if /include\s*[\"<]stdio.h/; 
+3

確かに、ackはすばらしいgrepの代替品です。 – Pinochle

+0

不正行為ではありませんが、sedはgrepを置き換える適切なツールです。 –

+2

@ウィリアム:ハァッ? 'sed'が編集され、' grep'がマッチします。 'sed'は' grep'を置き換える適切なツールとは何ですか? – Telemachus

10

含まれている変数をごまかしてい

​​

NB:ackを使用して

関連する問題