• ベストアンサー

テキストファイル内の指定文字が含まれる行以下を削除

いつもお世話になります。 以下、バッチ(bat)で可能でしょうか? テキストファイル内(sample.txt)に指定文字(SA2:という文字)が必ず1行含まれていて 2行以上にはなりません。 SA2が含まれる行以下を削除し、sample1.txtという名前で保存したいです。 findstr SA2 でSA2が含まれる行を調べられるのいですが、その行を含む以下の行を 削除するというのが、どのように考えたらいいのかわかりません。 お力添え頂けますでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • M_Sato
  • ベストアンサー率54% (550/1003)
回答No.2

sed.exe という、テキストファイルを1行ずつ読み込みながら処理するソフト(ストリーム・エディタといいます)を利用すれば、バッチで簡単に処理できます。 下記サイトから「Sed LOGOS版」をダウンロードし、解凍してください。使用するのはフォルダの中の sed.exe だけなので、これをデータと同じ場所にコピーしてください。 http://www.vector.co.jp/soft/dos/util/se000880.html 以下の内容のバッチ・ファイルを作成し、実行してください。 sed -ne "/SA2/!p;/SA2/q" sample.txt >sample1.txt 〔解説〕 -ne   実行時のオプションです。     sedはデフォルトでは読み込んだ行を処理後に出力するので、nオプションでそれを抑制します。      eオプションは直後の記述(引用符でくくられたもの)をコマンドとして解釈します。 /SA2/!p 読みこんだ行の中にSA2がなければ(!)、そのまま出力(p)せよ ;    コマンドの区切り /SA2/q  読み込んだ行の中にSA2があればそこで終了(q)せよ 〔参考〕 もしバッチを以下のようにすると、SA2のある行まで出力して終了します。 sed -e "/SA2/q" sample.txt >sample1.txt

vesper580109
質問者

お礼

M_Satoさん ご回答ありがとうございました。 またお礼が遅くなり申し訳ございません。 sed 便利そうなので使ってみましたが、行いたい処理ができました。 sedで処理し出力したを使っていろいろできそうな雰囲気があると思いました。 勉強したいと思います。 ありがとうございました。

その他の回答 (3)

回答No.4

for /f "delims=" %%a in (sample.txt) do ( If "%%a"=="SA2" ( Goto :EOF ) else ( Echo %%a > sample1.txt ) ) 何回もすみません。 実機なしのうわの空で書いているもので....^_^;

vesper580109
質問者

お礼

Viartril-Sさん お礼が遅くなり申し訳ございませんでした。 自身の現在の実力では、delims の使い方を勉強する必要があると 思いました。 勉強していきたいと思います。 ありがとうございました。

回答No.3

すみません、 Goto EOF は間違いで、 正しくは Goto :EOF です。

回答No.1

for /f "delims=" %%a in (sample.txt) do ( If "%%a"=="SA2" Goto EOF ) else ( Echo %%a > sample1.txt ) こうかな?

関連するQ&A

  • batやvbsでテキストファイルの何行目に指定の文字を追記する方法

    現在、下記内容のファイル(test.txt)指定した行に指定文字を追記できる方法を探しております。 【test.txt内容】 [test1] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test2] [test4] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test5] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: end 【追記したい内容】 test.txtの"[test2]"行の下の行に以下の文字を追記したいです。 [test3] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: 指定行に追記するというコマンド自体はないと思い、batやwshの本などを読んではいるのですがなかなか良い考えが浮かびません。 ご教示の程よろしくお願いいたします。

  • バッチファイル テキストファイル内の最後の\以下を削除したい

    バッチで、あるテキストファイル内の最後の\以下を削除して、その結果をバッチの値として利用したいです。 ●テスト条件 %TEMP%のtest.txt に以下のテキスト。 C:\Program Files\software\top xyz ●求める結果: 行末から最初の\以下の文字列を削除。この文字列をバッチファイルで使いたい。 C:\Program Files\software\ ●試したコマンド: なし 全体の流れとしては、バッチでquery取得したパスの不要な部分を削除して、求まったパス(のdirの結果を出力するために)を再度バッチで利用したいです。適切なコマンド・方法がありましたらお願いいたします。

  • バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが

    バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが開けない (1)と(2)のバッチファイルを作りました。それぞれ単体で実行すると、エラーは出ません。 (1)と(2)を一緒にした(3)というバッチファイルで実行すると、FINDSTRのところで、 「ファイルを開くことができません」というエラーが出て、途中でとまってしまいます。 エラーを出さずに実行する方法は何かないでしょうか? (A.batは、CドライブにあるWord.exeを実行するだけのバッチファイルです。) どうぞよろしくお願いします。 【(3)の中身】 call A.bat >kekka.txt   ←この1行だけが(1)のバッチファイルの中身です GOTO kensaku GOTO :EOF ::文字列検索 :kensaku SET keyword=作成しました。   ←この行から下が(2)のバッチファイルの中身です FINDSTR %keyword% kensaku.txt > NUL GOTO kekka%ERRORLEVEL% GOTO :EOF :kekka0 REM 文字列あり ECHO %keyword%がありました PAUSE > nul GOTO :EOF :kekka1 REM 文字列なし ECHO %keyword%はありませんでした。 PAUSE > nul GOTO :EOF

  • バッチファイルでテキストファイルの文字列を取得したい

    すみません、どなたか教えて下さい。 バッチファイル(test.bat)内で、他のテキストファイル(ok.txt)の文字列を取得したいです。 ok.txtは 20070614 TEST となってます。 この2つの文字列をそれぞれで取得する方法を教えて下さい。 よろしくお願い致します。

  • findstrでヒットした1行前の文字を拾いたいです。

    findstrでヒットした1行前の文字を拾いたいです。 Windows文字検索コマンドのfindstrがあります。 > findstr "ヒットしたい文字" c:\hoge.txt で、hoge.txtの「ヒットしたい文字」を取り出せますが、 ヒットした1行前の文字を抜き出す方法はありますでしょうか? unixのgrepだと"-1"のオプションで1行前の文字摘出ができました。 findstrのオプションでは無さそうなので代替案がありましたら お願いします。

  • ファイル内のデータを1行削除する方法

    いつもお世話になります。 今、ファイル操作を勉強しています。 sample.txtに下記のデータが格納されています。 【sample.txt】 --------------------- yamada.txt | 29 suzuki.txt | 25 kitamura.txt | 30 endo.txt | 32 --------------------- char *name="suzuki.txt"; sample.txtのデータがchar nameと一致する、 ファイルの行を削除し、行を詰めたいのですが どうしたらいいのでしょうか? 結果として、sample.txtが、 --------------------- yamada.txt | 29 kitamura.txt | 30 endo.txt | 32 --------------------- のように、一致したsuzuki.txtの行が削除され、 行が詰められている状態にしたいです。 どうぞよろしくお願い致します。

  • *.txtファイルの最終行だけ参照して、バッチファイルを作りたい

    *.txtファイルのなかに"test"という文字をfindstrコマンド又はfindコマンドで探して、出力したいのですが、全ての行を参照して出力するのではなくて、最終行だけを参照して出力するといったバッチファイルを作成したいのですが、どうやればいいのでしょうか? どうぞよろしくお願いいたします。

  • テキストファイルの最終行を削除したいのですが

    初めまして。 batかVBSのプログラムで、テキストファイルを開いて最終行のみを削除したいのですが、どうしても実現が出来ません。 もし分かる方がおられましたら、是非ともご教授をお願い致します。

  • テキストファイルの中の複数行の中である文字を含む行

    テキストファイルの中の複数行の中である文字を含む行のみを取り出しテキストファイルとして保存したいです。 たとえると、33000行のひらがなの単語が記された A.txtのテキストファイルがあり、内容は ------------------------------------------------ あかうそ あかうつ あかうつぎ あかうま あかうみがめ あかうみめ あかえる あかおとし あかおまな あがおもと あかおり あかか あかがえる あかかがち あかかげ あかがさ あかがし あかがしら あかかち あかかつち あかかね あかがね あかかねのほとと あかかぶ あかかり あかがり あかぎ あがき あかききひ あかきじ あかぎつね あかぎぬ あかきはしる あがきみ あかぎれ あかく あがく あかくちば あかくろなり あかげ あかげら ------------------------------------------------- とします。 このなかで「く」を含むすべての行を取り出しB.txtとして保存したいです。 B.txtの内容は下記のとおりです。 ------------------------------------------ あかく あがく あかくちば あかくろなり ------------------------------------------- となるような指定した文字を含むすべての行を取り出しテキストファイルとして保存する方法を知りたいです。 よろしくお願い致します。 返答をお待ちしております。

  • バッチファイルを使ってテキストファイルの任意の行を削除したい

    こんにちは。 バッチファイルを使って、テキストファイルの任意の行を削除したいのですが、可能でしょうか? 今困っているのは、あるファイルの1行目と2行目と最後の行を削除したいのですが、コマンドがわかりません。 いろいろ調べてみたのですが、わかりませんでした。 よろしくお願いします。

専門家に質問してみよう