4

次のような高速なデータ操作のために、いくつかの Perl ワンライナーを実行する必要があることがよくあります。

some_command | perl -lne 'print if /abc/'

パイプから読み取るため、コマンド引数のファイル名をループする必要はありません。どうすれば次を達成できますか?

some_command | perl -lne 'print if /$ARGV[0]/' abc

これにより、次のエラーが発生します。

Can't open abc: No such file or directory.

「-n」が

while(<>) {.... }

私のプログラムの周りで、 <> は引数をファイル名として受け取りますが、毎回次を行うのは少し非現実的です

#/bin/sh
while read line
do
   some_command | perl -lne 'BEGIN{$val=shift @ARGV} print if /$val/' "$line"
done

ファイル名として解釈されることなく、Perl ONE-LINER コマンドライン引数の「内部」に入るより良い方法はありますか?

4

3 に答える 3

2

読んだ行に何が含まれると思うかによって異なりますが、次のことを試すことができます。

#/bin/sh
while read line
do
   some_command | perl -lne "print if /$line/"
done

明らかに、$lineスラッシュが含まれている可能性がある場合、これは飛びません。次に、知る限り、BEGIN ブロックの定式化に固執しています。

于 2013-05-13T14:52:54.447 に答える