[解決済み] Perlによる多行検索置換
2023-07-13 17:08:52
質問
この種の質問はすでに何度もされていることだと思います。なぜまたここに来たかというと、何か単純で基本的なことを見落としているような気がするからです。
この種の検索-置換ルーチンをより良くすることは可能でしょうか。たとえば、同じファイルを 2 回開かなくて済むようにするなどです。また、速度関連のアドバイスも歓迎します。
これは複数行のマッチや複数行の文字列の置換でも動作することに注意してください。
#!/bin/perl -w -0777
local $/ = undef;
open INFILE, $full_file_path or die "Could not open file. $!";
$string = <INFILE>;
close INFILE;
$string =~ s/START.*STOP/$replace_string/sm;
open OUTFILE, ">", $full_file_path or die "Could not open file. $!";
print OUTFILE ($string);
close OUTFILE;
どのように解決するのですか?
このような検索と置換は、以下のようなワンライナーで実現できます。
perl -i -pe 's/START.*STOP/replace_string/g' file_to_change
同じことを実現する他の方法として、次のものをチェックしてください。 スレッド . 複数行の検索を扱うには、次のコマンドを使用します。
perl -i -pe 'BEGIN{undef $/;} s/START.*STOP/replace_string/smg' file_to_change
以下のコードをワンライナーから perl プログラムに変換するために perlrun ドキュメント .
もし、これを実際に動作するプログラムに変換する必要性を感じたら、Perlにファイルのオープンとクローズを処理させればよいのです。
#!/usr/bin/perl -pi
#multi-line in place substitute - subs.pl
use strict;
use warnings;
BEGIN {undef $/;}
s/START.*STOP/replace_string/smg;
次に、ファイル名を第一引数としてスクリプトを呼び出すことができます。
$perl subs.pl file_to_change
もし、もっと本格的なスクリプトでファイルのオープン/クローズ操作を行いたいのであれば、perlrun の -i[extension] スイッチ付きの例を見てみてください。
関連
-
[解決済み] Perlからロケール設定の警告を修正する方法
-
[解決済み] 最近のPerlはなぜデフォルトでUTF-8を避けるのですか?
-
[解決済み】Perlで配列のサイズを調べる
-
[解決済み] PerlからUTF-8を出力するにはどうしたらいいですか?
-
[解決済み] なぜPerl 5の関数プロトタイプはダメなのか?
-
[解決済み] Perlのprintがデフォルトで改行を追加するには?
-
[解決済み] Perl CGI スクリプトのトラブルシューティングはどのようにすればよいですか?
-
[解決済み] Perlで "my "キーワードはどのように使うべきですか?
-
[解決済み] Perl で、$variable が定義され、長さが 0 でない文字列を含んでいるかどうかを簡潔に確認するにはどうしたらよいですか?
-
[解決済み] Perlのビルド、ユニットテスト、コードカバレッジ。完全な実用例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜPerl 5の関数プロトタイプはダメなのか?
-
[解決済み] Perl のフラグ -pe, -pi, -p, -w, -d, -i, -t?
-
[解決済み] Perlのハッシュのキーを反復処理する最も安全な方法は何ですか?
-
[解決済み] Perlでハッシュを結合するには?
-
[解決済み] Perl CGI スクリプトのトラブルシューティングはどのようにすればよいですか?
-
[解決済み] Perlで "my "キーワードはどのように使うべきですか?
-
[解決済み] インストールされているCPANモジュールの一覧を取得するにはどうすればよいですか?
-
[解決済み] unixで任意のスクリプトをデーモン化するには?
-
[解決済み] Perlのビルド、ユニットテスト、コードカバレッジ。完全な実用例
-
[解決済み] 非 root ユーザーで CPAN を使用するにはどうすればよいですか?