文章内の指定した文字より前にある文を全削除したい


・メモ帳などの文章内で、指定した文字より前にある(上にある)文章を全削除。または指定した文字より後にある(下にある文章を全削除)が可能になるソフトがあれば教えてください。
これをフォルダ内にある複数のファイルに対して一括で処理したいです。

例えば以下のようなことです。
------------------------------------------------
:メモ帳ファイル(1) の本文

今日は買い物をした。とても疲れたが楽しかった。
休日だったので人がとても多かった。

明日のスケジュールは朝の7時に起きて、学校に向かう。
-------------------------------------------------
例えば「明日の」という文字より上の文章はすべて削除というルールを与えるとします。
「今日は~」から「多かった」まで削除という形です。
すべてのファイルに「明日の」という語句は入っているので、それを指定して、それより前にある言葉はすべて削除にするという設定で処理を行いたいです。また指定した語句より後にある語句もすべて削除という設定もできれば助かります。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/02/25 14:36:39
  • 終了:2012/02/26 20:13:17

ベストアンサー

id:freemann No.1

freemann回答回数315ベストアンサー獲得回数502012/02/26 09:34:54

Windowsであれば、Powershellで可能です。

param([switch] $r, $in,$ex,$regex)

function funcReplace{
	Param([string] $path, [string] $regex)

	$enc = [System.Text.Encoding]::GetEncoding("Shift-JIS")
	$stream = new-object System.IO.StreamReader($path, $enc)
	$text = $stream.ReadToEnd()
	$stream.Close()

	$ostream = new-object System.IO.StreamWriter($path, $false, $enc)
	$ostream.Write( ($text -replace $regex, "") )
	$ostream.Close()
}


if($r -eq $false){
	Get-ChildItem * -Include $in -exclude $ex | %{ funcReplace -p $_ -r $regex}
}else{
	Get-ChildItem * -Include $in -recurse -force -exclude $ex | %{ funcReplace -p $_ -r $regex}
}

上記のコードを、Replace.ps1というファイルに保存したとすると、

Replace.ps1 -r -in *.txt (?s:^.*?(?:=明日の))

で行けます。
一応私の環境で試してはいますが、本番をする前にコピーしたファイルで試してみてからにしてください。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません