プロが教える店舗&オフィスのセキュリティ対策術

皆さんのお知恵をお貸し頂ければ幸いです。

Perlで以下のようなことをしたいと考えています。
例えば、次のようなテキストファイルがあったとします。

example.log
==================================
aaaa
dada START
hogehoge
test
okok
perl
dodo END
script
==================================

上記ファイルを読み込んで、「START」から「END」が含まれた間の行だけ抜き出したいのです。
イメージとしては、読み込んだファイルを一行づつ読ませ、キーワード「START」が現れたらそこでフラグを立て、それ以降の行を表示し、キーワード「END」が現れた時点で表示を止めるという処理になるのかな?と思っています。

このような場合、どういう風にすればいいのでしょうか?
恐れ入りますが、ご教授頂ければ幸いです。

それでは、どうぞよろしくお願い致します。

A 回答 (4件)

以下のようにしてください。


STARTとENDの行は出力しません。

open(INFILE,"example.log");
$flag = 0;
while(<INFILE>){
if ($flag == 0){
if ($_ =~ m/\sSTART$/){
$flag = 1;
}
}else{
if ($_ =~ m/\sEND$/){
$flag = 0;
next;
}
print $_;
}
}
close INFILE;
    • good
    • 0

目印行も出力するなら、


perl -n -e 'print $_ if /START/../END/' filename.txt
しないなら、
perl -n -e 'print $_ if (/START/../END/) && !/START|END/' filename.txt
    • good
    • 0

まずは思いついた内容をコード化して検証する。


それで躓いたなら質問を立ててみた方が宜しかったのでは?

最初の『ファイルの読み込み』からわからないって訳ではないのでしょ?
    • good
    • 0

私だったら、まさに



> 読み込んだファイルを一行づつ読ませ
> キーワード「START」が現れたらそこでフラグを立て
> それ以降の行を表示し
> キーワード「END」が現れた時点で表示を止める

というプログラムにします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!