1

次の Perl ワンライナーを bash スクリプトで使用して、pre タグ間の複数行のテキストをキャプチャし、別の開始文字列と終了文字列でラップされたタグ コンテンツの 2 回目の繰り返しを追加しています。

new_start_string="NEWSTART"
new_end_string="NEWEND"

perl -i -pe  "BEGIN{undef $/;} s/<pre>(.*?)<\/pre>/<pre>\$1<\/pre>${new_start_string}\$1${new_end_string}/smg" /path/to/file

指定されたタスクに対して完全に機能します。HTML を正規表現で解析していることは承知していますが、これは理想的ではありませんが、このテキスト ファイルの書式設定は既知の要素であり、非常に単純で、ローカル制御下にあり、ローカル仕様によって行われるため、解析がやり過ぎで、解析を介してこれを行わないことを選択しました。

同じワンライナーを使用して、キャプチャ値 $1 変数の 2 回目の反復を URL エンコードするにはどうすればよいですか? それが不可能な場合、比較的単純で読みやすいこの結果を得るための別の方法はありますか?

4

2 に答える 2

0

Perlコアでモジュールを使用することを好んだので、CGI::Utilと組み合わせてe修飾子を使用してこのワンライナーの使用を終了しました。

perl -MCGI -i -pe  "BEGIN{undef $/;} s/<pre>(.*?)<\/pre>/'<pre>' . \$1 . '<\/pre>' . '$new_start_string' . CGI::escape(\$1) . '$new_end_string'/esmg" /my/path
于 2012-08-30T14:03:19.093 に答える
0

URI エスケープにはURI::Encodeを使用できます。置換内で関数を使用するには、/eオプションを参照してください。

于 2012-08-30T12:25:58.803 に答える