web-dev-qa-db-ja.com

正規表現処理のためにBashShellコマンドの出力を1行ずつPerlにパイプする方法は?

いくつかのBashShellコマンドからの出力データがあります。出力は、「\ n」または「\ 0」で行ごとに区切られます。出力をPerlにパイプし、Perl内でデータを1行ずつ処理する方法があることを知りたいです(出力をawkにパイプするのと同じですが、私の場合はPerlコンテキストにあります)。コマンドは次のようなものだと思います:

Bash Shell command | Perl -e 'some Perl commands' | another Bash Shell command

すべての「:」文字を「行ごと」に基づいて「@」文字に置き換えたいとします(グローバルな置換ではなく、奇数行や偶数行などの条件を使用して、現在の行に置換するかどうか。)、どうすればこれを達成できますか。

21
user1129812

perlrun を参照してください。

Perl -lpe's/:/@/g'      # assumes \n as input record separator
Perl -0 -lpe's/:/@/g'   # assumes \0 as input record separator

Perl -lne'if (0 == $. % 2) { s/:/@/g; print; }' # modify and print even lines

はい、Perlはawkのように、パイプラインのどこにでも表示されます。

26
daxim

コマンドラインスイッチ-p(自動印刷が必要な場合)または-n(不要な場合)は、必要な処理を実行します。行の内容は$ _にあるので:

Perl -pe's/\./\@/g'

解決策になります。一般的に、あなたは非ワンライナーのために行く方法である「<>」(ダイヤモンド)演算子を読みたいと思うでしょう。

8
Alien Life Form