
皆さんのお知恵をお貸し頂ければ幸いです。
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ランキング
-
2つ質問があり、まず1つ目な...
-
IEのリロードボタンを押すとデ...
-
無名配列にスライスを使いたい。
-
CGI.pmでHTMLのコメントタグを...
-
CGI.pmで<button>タグは出力で...
-
perlを使ってファイル分割
-
Perlからchasenの使い方
-
自動更新
-
大量メールの任意のヘッダだけ...
-
データ項目の並び替えについて
-
レコードの書込み判断
-
cgiでdocument.writeの書き出し
-
perl で作成された文書と知るに...
-
ディスク残量が無くなってしま...
-
どのようなプログラムをつくれ...
-
データファイルからのデータの...
-
ファイルの削除について
-
あるURLがファイルなのかディレ...
-
パスから最後のディレクトリだ...
-
linuxのperlでWindowsファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複するデータを抽出できる秀...
-
awkスクリプトでダブルクォーテ...
-
sprintfについて
-
DOSコマンドで、標準出力を出力...
-
文字コードの変換(Shift-JISか...
-
Perl<->Oracle間での文字化けに...
-
[Perl]ファイル出力のエンコー...
-
エクセルVBAで素数だけを出力す...
-
データの選択
-
apacheの動作について
-
「print関数は出力先のファイル...
-
教えて!perlから.exeファイル...
-
ファイル出力の改行コードをLFに
-
PerlからのCSV出力
-
Active Perlでsleepを使う。
-
[awk]uniq -cで複数ファイルの...
-
バッチファイルで、記号を含む...
-
EUCで出力されるプログラムをS-...
-
htmlから、ファイル、もしくはC...
-
リファレンスについて。
おすすめ情報