- ベストアンサー
DOSでテキストファイルの中のある文字だけを消すコマンドはありますか?
こんばんは。WindowsXPを使っています。だからコマンドプロンプトでDOSのコマンドを使っているのですが、できないことがあって困っています。 あるテキストファイルの中にある、ある文字だけを消去するコマンドってありますか? Linuxではtrというコマンドでそれができるのですが、DOSではできないんだろうか、と疑問です。 今のところ、その操作をエディタで行っていますが、何百個というファイルを扱う予定なのでDOSのコマンドでできれば、バッチファイルを作って一括処理ができるから便利だなと考えているのです。 私はwindows98から使い始めたのでDOSはあまりわからなくて、DOS世代の方などご存知でしたら教えてください。お願いします!!
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ごめんなさい。GNU Utilitiesがちゃんとダウンロードできるか、よく確かめませんでした。先ほど以下のURLでダウンロードできました。 http://sourceforge.jp/projects/sfnet_unxutils/downloads/unxutils/current/UnxUtils.zip/ 今後は気をつけます。もうお仕事は済んだそうですが、今後検索してこちらのQ&Aに辿り着く方もいらっしゃるかもしれませんので書き残します。 なお、コマンドプロンプトで%は変数名を意味し(bashでの$ですが、値を入れる時も付けます)、@はecho offと同等、つまり該当コマンド行を出力しないということです。"Windows バッチ for"とでもしてインターネット検索してみて下さい。
その他の回答 (5)
- hiroaki101
- ベストアンサー率81% (97/119)
こんにちは。先ほどの回答(#3)で一カ所間違えました。 C:\texts> for %f in (*.txt) do @tr -d "P" < %f > after\%f forループ内の最初のfの前に%が必要です。失礼しました。 ところで、確かにsedの方が使用範囲が広いでしょうね。インストールは簡単ですし(アーカイブを展開してすぐ使用可能)、利用できる場面が多いという点でsedはtrより便利で、どちらか一つ憶えるならsedだと思います。文字を消去したい場合は空文字列を指定すればいいですね("s/P//g")。Sourceforgeのアーカイブにも入っており、petertalkさんが紹介されたものも機能的に同等だと思います。
お礼
再度ありがとうございます。 コマンドを修正してくださってありがとうございます。あまりそのコマンドの文法がわからないので、なにがおかしいのか自分では確かめようがなかったと思います。
- petertalk
- ベストアンサー率69% (156/225)
No2です。 XPのコマンドプロンプト(command.com、cmd.exe)はほぼDOS互換なので、 sedは動作しますよ。 sed の使用法はunix のsedコマンドと同じです。 in.txt 中の aaa を bbb に変更して out.txt に出力するには、 以下の書式です。 C:\>sed -e s/aaa/bbb/g <in.txt >out.txt 他にも探せばツールはあると思いますが。
お礼
再度ありがとうございます。 実はご紹介いただいたsedは実行ファイルのsed.exeをダブルクリックしても 16ビット MS-DOS サブシステム C:\中間省略します\sed242\SED.EXE C:\PROGRA~1\Symantec|S32EVNT1.DLL インストール可能な仮想デバイスドライバはDLL初期化に失敗しました。アプリケーションを終了するには「閉じる」を選んでください。 と出てしまってインストールできなかったのです。 そこで、GNU SED DLL版1.18とWinSed COW版1.2をダウンロードしてそれらのファイルをC:\windowsディレクトリに置いて、コマンドプロンプトからsedと入力して使っています。 http://www.vector.co.jp/vpack/filearea/win/util/text/sed/ しかし、普通のsed s/a/b/g filename.csv > filename1.csv といったコマンドでは成功するのですが「"」を削除する sed s/\"//g filename.csv > filename1.csv では sed: Unterminated `s' command と出て処理ができないのです。 sed s/\"//g filename.csv > filename1.csv はubuntu9.04では成功してちゃんと処理できたので構文は間違ってないと思うのです。
- hiroaki101
- ベストアンサー率81% (97/119)
こんにちは。Windowsのコマンドプロンプトで使用できるプログラムが下記のURLで紹介されています。普段Linuxをお使いでしたら、このほうが使い勝手が良いかもしれません。 http://experiment.blog.so-net.ne.jp/2009-02-03 http://unxutils.sourceforge.net/ 上記"GNU utilities for Win32"のtrを使うなら、例えば変更対象がC:\textsフォルダ内にあるtxtという拡張子が付いたファイル全てだとして、 C:\texts> mkdir after C:\texts> for f in (*.txt) do @tr -d "P" < %f > after\%f などと実行すれば、各ファイルから全ての"P"が削除された状態でafterフォルダの中に元のファイル名で保存されます。念のため、元ファイル群は結果を確認されるまで削除しない方がいいと思います。 また、「DOS(=コマンドプロンプト)」プログラムではない、GUIのフリーソフトが以下のURLで紹介されています。置換後の文字列を""(空文字列)にしておけば、その文字が削除されると思います。 http://www.vector.co.jp/vpack/browse/pickup/pw6/pw006315.html http://www.vector.co.jp/vpack/browse/pickup/pw5/pw005577.html http://www.vector.co.jp/magazine/softnews/060905/n0609051.html http://www.forest.impress.co.jp/article/2008/05/08/replaceondotnet.html 他にも色々公開されているようです。"文字列 削除 Windows フリーソフト"などとインターネット検索すればもっと出てくるでしょう。 http://www.vector.co.jp/vpack/filearea/win/util/text/
お礼
親切なご回答ありがとうございます。 "GNU tilities for Win32"をとても使いたかったのですが、リンクで入れなかったり、検索してもどこでもダウンロードできるところがなかったりでダメでした(涙) ご紹介のフリーソフトの中からGUIでやりたいことができるものが見つかり、それを使ってフォルダ内に処理したいものを入れて一括で処理できました。 でも、本当はやっぱりコマンドで処理したり、バッチファイルを書いてやりたかったです。 こんなふうなコマンドでの操作にあこがれます。 C:\texts> mkdir after C:\texts> for f in (*.txt) do @tr -d "P" < %f > after\%f c:\textsディレクトリをカレントディレクトリとして、そこにafterディレクトリを作って、for f in (*.txt) do @ はよく分からないですが、tr -d "P" でPを消して、その対象となるデータは%f(これはなんでしょう)から入力して、出力は afterディレクトリにある%fへ。くらいしか今は理解できないレベルです(汗)
- petertalk
- ベストアンサー率69% (156/225)
コマンドプロンプトもバッチ処理には便利ですよね。 標準ではないですが、DOS 用の sed があります。 OSにも依存しないし軽いので最適だと思います。 http://www.vector.co.jp/soft/dos/util/se000880.html
お礼
ご回答ありがとうございます。 参考URL見てみました。プラットフォームがDOSとなっていると思うのですがXPしか持っていないので使えないような気がします。 知識が無くてすみません。コマンド・プロンプトで多少操作はできるのですが、DOS用のsedというものをどうやって使えるのかがよくわからなくて。
- 486HA
- ベストアンサー率45% (1013/2247)
Windows 2000 以後、[DOS]ではなくて「コマンド・プロンプト」です。 「コマンド・プロンプト」の機能を供するものとして[Windows Power Shell]というものがマイクロソフトから提供されています。 「Windows XP 用 Windows PowerShell 1.0 インストール パッケージ」 http://www.microsoft.com/downloads/details.aspx?familyid=30125A46-B97C-4704-AA10-605E809D5933&displaylang=ja この中で「Clear-Content コマンドレットの使用」が応用できると思います。 http://www.microsoft.com/japan/technet/scriptcenter/topics/msh/cmdlets/clear-content.mspx
お礼
ご回答ありがとうございます。 DOSではなくてコマンド・プロンプトと言った方が良いのですね。わからず、すみません。 Widows PowerShellというものがあるのですか。参照のURLを見たのですが今のところよくわかりません・・・。 少なくともXPのコマンド・プロンプトでは私のしたい処理はできないようですね。
お礼
ありがとうございます!! GNU Utilitiesをちゃんとダウンロードできて、環境変数の設定もできて、Windows上のコマンドプロンプトでLinuxのコマンドが使えるという状態になりました。 お仕事(笑)はフリーソフトでできてしまいましたが、こっちのやり方でもバッチファイルを作ったりして試してみたいと思います。 コマンドプロンプトの構文は難しいですね。"windows バッチ for"でインターネット検索してもう少し調べてみようと思います☆