![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
Perlの勉強中なのですが、テキストファイルに書かれた特定の複数行を
コメント行として編集(置換)したいのですが、うまく出来ずに悩んで
います、、、。
アドバイス頂けると助かります。
■やりたい事
以下のようなテキストファイル(test.txt)が有ったとして、
===========ここから
abcdefg
hijklmn
xxyyzz [aaa bbb
ccc ddd
eee fff]
opqrstu
vwxyz
===========ここまで
xxyyzzから最初に現れる"]"までをマッチさせ、
その行頭に"## "を挿入する。
===========ここから
abcdefg
hijklmn
## xxyyzz [aaa bbb
## ccc ddd
## eee fff]
opqrstu
vwxyz
===========ここまで
■試したこと
===========ここから
#! /usr/bin/perl
my $file = 'test.txt';
open my $fh, '<', $file
or die "Can't open $file: $!";
my $page = do { local $/; <$fh> };
my $str1 = '';
if ( $page =~ m|(xxyyzz \[.+?\]\n)|s ) {
$str1 = $1;
$str1 =~ s/^/## /mg;
print "$str1";
}
===========ここまで
複数行マッチまではなんとか辿り着いたのですが、当然このやり方では
マッチした行しか出力させられず、途方に暮れています、、、。
なにかヒントを頂けると嬉しいです。
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
ん~と, 文章では「xxyyzzから最初に現れる"]"までをマッチさせ、」ってなってるけどスクリプトの方は「xxyyzz [ から最初の『行末の』] まで」になってるよ. どっち?
まあどっちにしても, 複数行マッチじゃなくってフラグを 1個使えばいいような気がする. 例えばスクリプトにあわせるなら
my $in_comment = 0;
while (<>) {
$in_comment = 1 if /xxyyzz \[/;
s/^/## / if $in_comment;
$in_comment = 0 if /\]$/;
print;
}
のような感じ. .. を使えればもっと簡単なんだけど, この場合にはあわないんだよね.
Tacosanさん、
早速の回答ありがとうございました。
> 文章では,,
すいません、サンプルで載せたスクリプト例の方が間違いです、、、。
xxyyzzの後の"["はどこに登場するか分からないので、文章の方が正しいです。
特定のキーワードをフラグにして動作するようにすれば、確かに複数行マッチに
こだわる必要ありませんね。
一行でif文を書けるのですね、勉強になります。
実はキーワードに応じて編集内容を変える必要があるのですが、教えて頂いた
方法で試してみたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Excel(エクセル) セルの値からファイルを複数作りたい 2 2022/10/06 12:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで時間の計算
-
perlをバージョンアップしたら...
-
積分計算の答えが合いません・・・
-
【超初心者】異なるディレクト...
-
アルファベットに付いて質問し...
-
画像が表示でnull; this.src
-
Perlで特定文字列から特定文字...
-
openした後、closeしないでプロ...
-
テキストファイルで提出とは?
-
ファイルをディレクトリ分配の...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
perlについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
openした後、closeしないでプロ...
-
テキストファイルで提出とは?
-
INDIRECT 横に再度抽出したい
-
Perlで特定文字列から特定文字...
-
perlをバージョンアップしたら...
-
Wallpaper Engineでおすすめの...
-
arduino の割り込み処理について
-
アルファベットに付いて質問し...
-
Strawberry Perl for Windows ...
-
Perlで時間の計算
-
このファイルを開く方法で困っ...
-
TeraPadエディターの操作方法に...
-
cgiでサーバーにファイルを追加...
-
フローチャート 九九
-
LinuxにおいてのPerlのプログラ...
-
perl 初等プログラミングについて
-
Perlのエラーについてご教授く...
-
こんにちは ブラケッツでプログ...
-
bashスクリプト
-
perlプログラミング 空白行削除
おすすめ情報