皆さんのお知恵をお貸し頂ければ幸いです。
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ランキング
-
sprintfで10進数を桁数指定で16...
-
awkスクリプトでダブルクォーテ...
-
ファイル出力の改行コードをLFに
-
教えて!perlから.exeファイル...
-
Perl中で teeを使っても戻り値...
-
DOSコマンドで、標準出力を出力...
-
Perlでファイルの末尾から指定...
-
C言語で特定の行を抽出する方法...
-
fgets で値が取得できない
-
空白文字 \\f と\\v の違いに...
-
perlで、後ろの行を読んで、前...
-
VBAのFileFormatで悩んでいるこ...
-
Perlで他サイトの情報を取得し...
-
ifstream を利用した1行分のテ...
-
VBAコードを張り付け後のエクセ...
-
perl で googleAPIを呼び出す...
-
1行がやたら長いテキストをバッ...
-
Windowsで複数のファイルを同じ...
-
全角と半角文字が混在している...
-
CSVファイルについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
DOSコマンドで、標準出力を出力...
-
重複するデータを抽出できる秀...
-
Perlでファイルの末尾から指定...
-
sprintfについて
-
[Perl]ファイル出力のエンコー...
-
エクセルVBAで素数だけを出力す...
-
文字コードの変換(Shift-JISか...
-
テキストファイルから日本語部...
-
sprintfで10進数を桁数指定で16...
-
ファイル出力の改行コードをLFに
-
Perlからsyslog経由でログを出...
-
PerlからのCSV出力
-
perlでcsvの出力について
-
教えて!perlから.exeファイル...
-
バッチファイルで、記号を含む...
-
perl CGIでのhttpヘッダー出力...
-
print文で&(半角)文字のエラー...
-
Perlでエラーログに日時をつける
-
紙にもホームページにも同じレ...
おすすめ情報