2016-09-05 17 views

答えて

0

-p各行が印刷されます。 while (<>) { ... } continue { print }
-nは、各行を自動的に印刷しません。 while(<>) {...}

などに相当し、FOOfooを置き換える:

$ echo 'foo bar' | perl -pe 's/foo/FOO/' 
FOO bar 
$ echo 'foo bar' | perl -ne 's/foo/FOO/' 
$ 

例えば、-nが有用である一つの例では、すべての行が印刷されたくない場合で、かつ、コードで条件付きの印刷があり、 fooを含む表示ラインのみ:

$ echo -e 'foo\nbar\nanother foo' | perl -ne 'print if /foo/;' 
foo 
another foo 
$ 
-1

のperl -nはしばらく(<>)と等価である{...} のperl -p等価tと{...;印刷;}(<>)一方O

+1

@Rob Bednarkの答えと同じです: '-p'では、printは' continue'ブロックにあります。 'perl -pe 'next''コマンドを実行すると簡単にテストでき、入力したものを表示します。while(<>){next; print;}'は何も印刷しません。 – Dada

7

-p-npの略であり、-nで作成されたループの各パスのために印刷される$_を引き起こします。

LINE: while (<>) { 
    ... 
} 
continue { 
    die "-p destination: $!\n" unless print $_; 
} 

LINE: while (<>) { 
    ... 
} 

一方

perl -pe'...' 

は、以下のプログラムを実行する:


perl -ne'...' 

は、以下のプログラムを実行します


perlのコマンドラインオプションについては、perlrunを参照してください。

+0

* '-p'は' -np' *の略で、どういう意味ですか?私はドキュメンテーションでそれを見ない。 –

+0

ドキュメントは '-p'を私とは違って記述しますが、同等です。私の記述は実装をより正確に反映し、2つの間の類似性を認めていますが、perlrunは完全に異なって無関係なふりをしています。しかし、再び、両方の説明は、異なるが、同等である。 – ikegami

7

どちらを使用するかはどのように決定しますか?

あなたは自動的に暗黙のwhileループの各反復の終わりに$_の内容を印刷したい場合は、-pを使用しています。 $_を自動的に印刷したくない場合は、-nを使用します。

例:-p。ファイルに行番号を追加する:

$ perl -pe '$_ = "$.: $_"' your_file.txt 

-nの例です。基本grepの交換。

$ perl -ne 'print if /some search text/' your_file.txt 
関連する問題