皆さんのお知恵をお貸し頂ければ幸いです。
Perlで以下のようなことをしたいと考えています。
例えば、次のようなテキストファイルがあったとします。
example.log
==================================
aaaa
bbbb START
hogehoge
cccc START
test
okok
perl
eeee END
script
==================================
上記ファイルを読み込んで、「cccc START」から「eeee END」の間に挟まれた行だけ抜き出したいのです。
いろいろ試してみましたが、どうしても初めの「bbbb START」から「eeee END」まで出力されてしまいます。
このような場合、どういう風にすればいいのでしょうか?
恐れ入りますが、ご教授頂ければ幸いです。
それでは、どうぞよろしくお願い致します。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
foreach (<>) {
if(/\bSTART$/){$f=1,$x=""}
elsif($f && /\bEND$/){print $x;$f=0}
elsif($f){$x.=$_}
}
No.3
- 回答日時:
本当に
「cccc START」から「eeee END」の間
であるなら, しかるべく指定すれば
どうしても初めの「bbbb START」から「eeee END」まで出力されてしまいます
なんてことにはならないよ.
さておき, #2 と同じ方針だけどたとえば
open my $fh, '<', 'example.txt' or die "file open error\n";
$_ = do {
local $/ = undef;
<$fh>;
};
my ($target) = m/.*\sSTART$(.*)\n[^\n]*\sEND$/ms;
print "$target\n";
とか?
No.2
- 回答日時:
こんな感じ?
my $str = "";
my $ret = "";
open(DATAFILE, "< example.log") or die("error :$!");
while (my $line = <DATAFILE>){
chomp($line);
$str = "$str$line\n";
}
close DATAFILE;
if ($str =~ /cccc START([\s\S]+)eeee END/){
$ret = $1;
}
print "$ret";
No.1
- 回答日時:
STARTの次の行から出力ではなく、内部にためるようにしないとだめです。
ためている最中にSTARTがきたら、いままでためていたのを破棄します。
ENDがきたら、たまっていたもの吐き出します。
open(INFILE,"example.log");
@lines = ();
$flag = 0;
while(<INFILE>){
if ($_ =~ m/\sSTART$/){
$flag = 1;
@lines = ();
next;
}
if ($flag == 1){
if ($_ =~ m/\sEND$/){
$flag = 0;
&flush();
next;
}
push(@lines,$_);
}
}
close INFILE;
sub flush()
{
foreach $line (@lines){
print $line;
}
@lines = ();
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl Perlで特定文字列から特定文字列までを抜き出したい 4 2022/04/02 14:24
- Visual Basic(VBA) tatsumaru77様 昨日回答して頂いたものです。 すみませんが、昨日の質問で1つ補足があります 1 2022/05/15 15:06
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) エクセルVBA 4 2022/05/14 00:51
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
DOSコマンドで、標準出力を出力...
-
テキストファイルから日本語部...
-
sprintfについて
-
Perl<->Oracle間での文字化けに...
-
重複するデータを抽出できる秀...
-
バッチファイルで、記号を含む...
-
文字コードの変換(Shift-JISか...
-
コマンドプロンプトで行が見え...
-
FindFirstFileとFindNextFileで...
-
ExcelをCSV書き出す場合のシー...
-
perlにて2つのファイル比較
-
ファイル名を複数個配列で確保...
-
バッチファイルの作り方(CSV→...
-
Windowsで複数のファイルを同じ...
-
Perl:Unicodeプロパティ作れない
-
perlで、後ろの行を読んで、前...
-
VBAで巨大なファイルの途中から...
-
fopenでディレクトリ内の全ファ...
-
batファイルでrenameができませ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
エクセルVBAで素数だけを出力す...
-
sprintfについて
-
教えて!perlから.exeファイル...
-
重複するデータを抽出できる秀...
-
log2の「正確な」計算方法
-
DOSコマンドで、標準出力を出力...
-
文字コードの変換(Shift-JISか...
-
perlでの文字列抽出
-
至急お願いします。C言語で.img...
-
ダイアモンド演算子<>に対するb...
-
コマンドプロンプトで行が見え...
-
Perlで着メロDLカウント
-
perlのpushについてです。
-
perlでcsvの出力について
-
ドメインからIPアドレスあるい...
-
perlでcsvの指定フィールドに書...
-
MySQLに画像を格納してperlで取...
-
htmlから、ファイル、もしくはC...
-
CGIから外部コマンド実行時の標...
おすすめ情報