3つのファイル(list1,list2,list3)を順番に読み込んで
ファイルの中のGoodという文字をBadにして
新たにlist1_new、list2_new、list_3new
という名前のファイルに書き込みたいのですが
やり方がわかりません。 下記のプログラムを
ベースに教えていただけませんか?


#! /usr/local/bin/perl

foreach LIST ( \
list1 \
list2 \
list3 \
)

open(FILE , "${LIST}" ) || die Damedame;
while (<FILE>) {
s/Good/Bad/g ;
print;
}

このQ&Aに関連する最新のQ&A

A 回答 (2件)

foreach $LIST ( # $付ける


list1, # カンマ
list2,
list3
)
{ # foreachカッコ
open(FILE2 , ">${LIST}_new" ) or die Damedame2; # 出力用ファイルオープン
open(FILE , "${LIST}" ) or die Damedame;
while (<FILE>) {
s/Good/Bad/g ;
print FILE2 $_; # 出力処理
}
close(FILE); # クローズ
close(FILE2); # クローズ
} # foreachカッコ
    • good
    • 1
この回答へのお礼

丁寧に教えてくださってありがとうございます。
やりたいことができました。

お礼日時:2007/11/05 09:51

古いファイルに拡張子をつけて、内容を更新するというのじゃだめですか?


それでよいなら

perl -pi.bak -e 's/GOOD/BAD/g' 対象のファイル

とかですんじゃうんですが。
_newをつけるのがどうしても良いのだというなら

use strict;

foreach my $file qw(list1 list2 list3) {
my $newfile = $file . "_new";
my $ofh;
my $ifh;
unless (open($ifh, '<', $file)) {
warn "can't open file $file $!\n";
next;
}
unless (open($ofh, '>', $newfile)) {
warn "can't open file $newfile $!\n";
close $ifh;
next;
}
while (<$ifh>) {
s/GOOD/BAD/og;
print $ofh $_;
}
close $ofh;
close $ifh;
}

こんな感じで。
どれかのファイルで失敗しても後続のファイルを処理するようにしてます。
あと bareword はあまり使うべきでないのでリストは qw() で作ってます。
    • good
    • 0
この回答へのお礼

-piというのがあるのですね。
参考になりました。
ありがとうございます。

お礼日時:2007/11/05 09:49

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q復元ポイントの作成とイメージファイル等のバックアップとの違いについて

今晩は、宜しくお願いします。

復元ポイントの作成とイメージファイル等のバックアップとの違いについて教えて下さい。

Windowsで復元ポイントからシステムを復元させる方法があり、
また、イメージファイル等にバックアップをとり、復元させる方法もありますが
この両者はどのように違うのでしょうか。

復元ポイントの作成とは、その時点のシステムの設定等だけを保存しているという
ことでしょうか。

また、イメージファイル等のバックアップを作成するということは
システム設定と作成したファイル等もイメージファイルとして一括してバックアップ
されるのでしょうか。

イメージファイルの復元時に、作成したファイル等もイメージファイルから
復元されるのなら、同じ名前のファイルがあった場合には、
イメージファイル作成時の古い情報のファイルになってしまうのでしょうか。

以上、宜しくお願いします。

Aベストアンサー

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。修復されるのは、選択した項目により異なる。
WindowsREを利用。
https://msdn.microsoft.com/ja-jp/library/hh825173.aspx

【バックアップと復元】
システムのバックアップを作成し、ハードディスクなどが壊れた場合に備えパソコン内部のデータを全てバックアップ・復元出来る。
Windowsのインストールディスクや、システム修復ディスクから復元が可能。
システムもユーザーデータもバックアップを取った時点の状態に戻る。

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。...続きを読む

Qperl ファイル内文字列抽出

お世話になっております。
perlでファイルない文字データを抽出する作業をしたいですが、やり方が分からなくて、ご存知の方ぜひ教えて頂けばと思います。
001.html内の内容
<html>
<head>
</head>
<body>
テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト<img src="aaa" \/>テキストテキストテキストテキストテキストテキストテキストテキスト<img src="bbb" \/><img src="ccc" \/><img src="aaa" \/>テキストテキストテキストテキストテキストテキストテキストテキスト</body>
</html>

質問内容

(1)このなかの<img src="aaa" \/>イメージファイル名を抽出したいです。本文ではイメージファイルの拡張子はなしです。入力の間違いではないです。
(2)抽出した文字列をimg.txtファイルで出力


以上よろしくお願いします。

Aベストアンサー

ちと気になった点を突っ込ませてくださいな>#4.
my $html = join("", <IN>);
よりは
$/ = undef; my $html = <IN>;
の方がよいかと. あと,
printf(OUT "%s\n", join("\n", @src));

$" = "\n"; print OUT "@src\n";
にした方がシンプルじゃないかな.

あと open は (それなら) 3引数にするとか, そもそもリダイレクト (とコマンドライン引数) にまかせた方が簡単とかありますけどね.

Q救出ファイル復元 2の機能について

「救出ファイル復元 2」で画像ファイルJPEGの他にRAWファイル、拡張子(CR2)を復元出来るでしょうか。

キャノンの一眼デジカメを使っているのですが、他の復元ソフトでは、復元出来ませんでした。

Aベストアンサー

Vectorあたりで『ディスク・ファイル復旧』の項目で探せばみつかりそうですが。
要は,"復元ソフトで復元できるファイルがソフトに登録されている拡張子だけしかできない"ことですので,拡張子を選択できる復元ソフトを捜せばいいと思われます。

参考URL:http://www.vector.co.jp/vpack/filearea/win/util/disk/care/

QPerlの文字列置換について

とあるソースで
$hogehoge =~ s!<文字列>! do{ $hoge =qq(hogehoge);} !egiox; $_ = $hoge;
というのを見たのですが
$hogehoge =~ s/<文字列>/hogehoeg/egiox;とは何が違うのでしょうか?

また修飾子gとoではどちらが評価されるのでしょうか?または二つとも評価されるのでしょうか?


宜しくお願い致します。

Aベストアンサー

s/// のオプションである e, g, i, o, x のそれぞれの意味は理解できていますか?
まあ上の書き方が素直だとはあまり思えないが. 結果は
$hoge = qq(hogehoge) if $hogehoge =~ s/<文字列>/hogehoge/egiox; $_ = $hoge;
と同じじゃないかなぁ. 「hogehoge」が (2個じゃなく) 1個ですむってのが「利点」といえば利点だけど....

Q削除した画像ファイルの取り出しまたは復元方法

ごみ箱に入れてから削除したファイルの復元方法を教えてください。

以前にも同様の質問をしたのですが、その際に教えていただいた方法で確かにいくつかのファイルは復元することができました。

しかし、一番復元したい画像ファイル(jpeg形式)が復元できません、同時期に同じく削除したファイルは無事に取り出せたのですが肝心のファイルは取り出せません。指定するファイル名、フォルダ名などの間違いはないのですが何が原因で復元できないのか理解できません。

良きアドバイスをいただければ助かります。
宜しくお願いいたします。

Aベストアンサー

こういったファイル復元ソフトを利用してファイルを復活させます。

●FileRecovery(フリーウェア)

消去・欠損したファイルを復元するソフト。
http://www.pcinspector.de/download.htm

●復元(フリーウェア)
http://www.vector.co.jp/soft/win95/util/se192983.html

■FINALDATA(ファイナルデータ)フォトリカバリー3.0(有料)
http://www.finaldata.ne.jp/f_8_3.html

当然ながら復元できる確立は有料ソフトのほうが高いです。

これらを使っても復元できない場合はファイルが上書きされて完全に消えている可能性が高いです。

QPerlの文字列置換について

質問です。文字列の置換を行いたいのですが、まずはソースから・・・

use File::Basename;
use File::Copy;
use File::Find;
use File::Path;

my @filelist = ();


$inputfile='C:\Users\test.txt';
$outputfile='C:\Users\test_new.txt';

open (IN, $inputfile) or die "$!";
open (OUT, ">$outputfile") or die "$!";

while(<IN>) {
$str = $_;
if ($str =~ /html:text/) {
$str =~ s/html:text/s:textfield/g;
$str =~ s/property/name/;
$str =~ s/styleClass/cssClass/;
elsif($str =~ /html:textarea/) {
$str =~ s/html:textarea/s:textarea/g;
$str =~ s/property/name/;
$str =~ s/style/cssStyle/;
$str =~ s/styleClass/cssClass/;
}
print OUT $str;
}


close (IN);
close(OUT);


sub wanted{
push(@filelist, $File::Find::dir."/$_") unless ($_ =~ /^\.$/);
}

Perlプログラムで下記のソースを一括置換します。
<html:text property="xxx" styleClass="yyy">
<html:textarea property="abc" styleClass="def" style="ghi">

目標は以下のように置換したいです
<s:textfield name="xxx" cssClass="yyy">
<s:textarea name="abc" cssClass="def" cssStyle="ghi">

しかし、上記のプログラムを実行すると
<s:textfield name="xxx" cssClass="yyy">
<s:textfieldarea name="abc" cssClass="def" style="ghi">

となってしまいます。
どこをどう直せばよいのかわからないので誰か教えてください。
お願い致します!!

質問です。文字列の置換を行いたいのですが、まずはソースから・・・

use File::Basename;
use File::Copy;
use File::Find;
use File::Path;

my @filelist = ();


$inputfile='C:\Users\test.txt';
$outputfile='C:\Users\test_new.txt';

open (IN, $inputfile) or die "$!";
open (OUT, ">$outputfile") or die "$!";

while(<IN>) {
$str = $_;
if ($str =~ /html:text/) {
$str =~ s/html:text/s:textfield/g;
$str =~ s/property/name/;
$str =~ s/styleClass/cssClass/;
elsif($str =~ /ht...続きを読む

Aベストアンサー

単純な解決方法
置換の順番を変える。
/html:text/ は"html:text"にも"html:textarea"にもマッチするので、先に/html:textarea/を処理する。
/html:text / と半角スペースを含めてマッチさせる。
 Perlを含めて最長マッチをしますからね。

Q「ウイルス感染ファイル」削除後のシステム復元でどうなる?

ウイルスバスターで幾つかのウイルス感染ファイル発見し全て削除しましたが、感染したファイルはシステムファイルでしたので少し心配でしたが削除しました。
そこで教えて頂きたいのですが、感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?

Aベストアンサー

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライブにOSのインストールディスクを入れておく。
2.「スタート」「コマンドプロンプト」または「ファイル名を指定して実行」で
「sfc /scannow」と入力して「OK」

「Windows XP professional のディスクを入れてください」という表示が出ることがありますがHome Editionであれば「無視」を選んでスキップしてください

>感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?
出来ないことはないでしょうが、あまりお勧めできません。
現在の状態が正常でない。
過去の状態の方が快適に操作できる。
という場合、それがいいかもしれません。
しかし、Windowsの設定というのは非常に広範囲にわたっており、現在と過去を比較して、どちらが適正かを判断するのは容易ではありません。
また、過去の復元ポイントの中には不正な設定が含まれている場合があり、間違って、そのポイントを選択することもあります。
ウィルス対策ソフトのサイトでは一旦復元設定を無効にして、過去の復元ポイントを全て消去することを推奨しています。

>一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?
間違った操作をすると汚染されたファイルが復元されてしまいます。
一旦復元設定を無効にして、過去の復元ポイントを全て消去することで汚染されたファイルは二度と復元しません。

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライ...続きを読む

Qフォルダ内のファイルを全て開き文字列置換

こんばんは。Perl超初心者です(プログラミングの初心者でもあります)。

フォルダ内にあるすべてのファイルに対して、正規表現を使った文字列置換をしたいのですが、うまくいきません。アドヴァイスをいただけないでしょうか。

具体的には、あるファルダの中に100個程のファイルがあって、その中の改行が3回連続している部分を、「改行+[SAMPLE]+改行」に置換をしたいと表います。

Windows XP Professional SP3 / ActivePerl 5.10 の環境で、以下のように記述したのですが、「Missing $ on loop variable at insert.pl line 5.」とエラーになってしまいます。どこで、間違ったのでしょうか(というか、まるでダメなスクリプトかもしれませんが…)。

use strict;
use warnings;

my @filename = glob "*.txt";
foreach open(FILE, "$filename(@filename)") {
my @content =<FILE>;
@content =~ s/\n{3}/\n[SAMPLE]\n/g;
print FILE @content;
close(FILE);
}

どなたか、ご教示いただけると非常助かります。
よろしくお願い致します。

こんばんは。Perl超初心者です(プログラミングの初心者でもあります)。

フォルダ内にあるすべてのファイルに対して、正規表現を使った文字列置換をしたいのですが、うまくいきません。アドヴァイスをいただけないでしょうか。

具体的には、あるファルダの中に100個程のファイルがあって、その中の改行が3回連続している部分を、「改行+[SAMPLE]+改行」に置換をしたいと表います。

Windows XP Professional SP3 / ActivePerl 5.10 の環境で、以下のように記述したのですが、「Missing $ on loop variabl...続きを読む

Aベストアンサー

寝る直前に書いたので寝ぼけてました。
こんな感じでどうでしょう。

わからないところがあれば遠慮なく質問してください>質問者様

use strict;
use warnings;

use feature ':5.10';

use strict;
use warnings;

undef $/;

foreach my $file (glob '*.txt') {
open my $rfh, '<', $file or next;
my $tmp = "$file" . "tmp";
open my $wfh, '>', $tmp or die;
my $content = <$rfh>;
$content =~ s/\n{3}/\n[SAMPLE]\n/g;
print $wfh $content;
close $rfh;
close $wfh;

#unlink "${file}.bak"
rename $file, "${file}.bak";
rename $tmp, $file;
}

寝る直前に書いたので寝ぼけてました。
こんな感じでどうでしょう。

わからないところがあれば遠慮なく質問してください>質問者様

use strict;
use warnings;

use feature ':5.10';

use strict;
use warnings;

undef $/;

foreach my $file (glob '*.txt') {
open my $rfh, '<', $file or next;
my $tmp = "$file" . "tmp";
open my $wfh, '>', $tmp or die;
my $content = <$rfh>;
$content =~ s/\n{3}/\n[SAMPLE]\n/g;
print $wfh $content;
close $rf...続きを読む

Q復元ソフトのふと感じた疑問 -ファイル名を削除したい-

先日、復元ソフトを使用していたときに感じたことなのですが
(使用ソフトは「復元」です。)
ファイルを復元する際の手順で削除したファイルが検索できますよね。
このファイル検索の時に、HITしないようにファイル名を完全に削除したい場合はどのようにすればいいのでしょうか??

例えば、「●●との秘密旅行001.jpg」のファイルを削除したとします。
その後、復元ソフトで検索をかけるとファイルを復元しなくてもファイル名を見ただけで怪しいファイルとわかってしまいますよね。
復元ソフトの検索で、表示されなくする方法か、別名に変える方法があるのなら教えてください。

Aベストアンサー

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名前を消去したいファイルをクリックするか、名前を消去したい複数ファイルを左クリックしながら選択する→[消去]ボタンをクリック→[OK]をクリック

これで、名前を消せます。しかしながら完璧ではなくて、一部消せないこともあります。
(「DataRecovery」を再起動してもう一度ドライブをスキャンすると消せなかったファイルが表示されます)

参考URL:http://www.vector.co.jp/soft/win95/util/se382922.html

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名...続きを読む

QPerlでの文字列置換

大学での研究でperlを使用しているのですが、次のような問題が起こって少し困っています。

Perlで以下のようなscriptを書いたのですが、うまく置換してくれないのです。

***************************************************************************
printf(STDERR "start replacement\n");

$L1_before="+ L1_01\n";
$L1_after=3.14;

$string=~ s/(=$L1_before)/=$L1_after/g;

printf(STDERR "L1_before=%s",$L1_before);
printf(STDERR "L1_after=%.2f\n",$L1_after);
printf(STDERR "string=%s\n",$string);

printf(STDERR "end replacement\n");
****************************************************************************

実行結果は、以下の通りです。

****************************************************************************
start replacement
L1_before=+ L1_01
L1_after=3.14
string=
end replacement
****************************************************************************

これは簡易版なのですが、やっていることはそのままです。
何が問題になっているのでしょう。わかる方は教えていただけると助かります。
ちなみに、私はPerlを勉強し始めたばかりです。

大学での研究でperlを使用しているのですが、次のような問題が起こって少し困っています。

Perlで以下のようなscriptを書いたのですが、うまく置換してくれないのです。

***************************************************************************
printf(STDERR "start replacement\n");

$L1_before="+ L1_01\n";
$L1_after=3.14;

$string=~ s/(=$L1_before)/=$L1_after/g;

printf(STDERR "L1_before=%s",$L1_before);
printf(STDERR "L1_after=%.2f\n",$L1_after);
printf(STDERR "string=%s\n",$strin...続きを読む

Aベストアンサー

すみません。何を問題にしているかがわかりません。

このスクリプトでどうなることを期待しているのですか?


> $string=~ s/(=$L1_before)/=$L1_after/g;

変数$string(に格納された文字列)に対してs//コマンドで置換を試みてますが、このスクリプト中では$stringになにかを代入したいるようすが無いので、無意味な命令になっていますが。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング