
こんばんは。WindowsXPを使っています。だからコマンドプロンプトでDOSのコマンドを使っているのですが、できないことがあって困っています。
あるテキストファイルの中にある、ある文字だけを消去するコマンドってありますか?
Linuxではtrというコマンドでそれができるのですが、DOSではできないんだろうか、と疑問です。
今のところ、その操作をエディタで行っていますが、何百個というファイルを扱う予定なのでDOSのコマンドでできれば、バッチファイルを作って一括処理ができるから便利だなと考えているのです。
私はwindows98から使い始めたのでDOSはあまりわからなくて、DOS世代の方などご存知でしたら教えてください。お願いします!!
No.6ベストアンサー
- 回答日時:
ごめんなさい。
GNU Utilitiesがちゃんとダウンロードできるか、よく確かめませんでした。先ほど以下のURLでダウンロードできました。http://sourceforge.jp/projects/sfnet_unxutils/do …
今後は気をつけます。もうお仕事は済んだそうですが、今後検索してこちらのQ&Aに辿り着く方もいらっしゃるかもしれませんので書き残します。
なお、コマンドプロンプトで%は変数名を意味し(bashでの$ですが、値を入れる時も付けます)、@はecho offと同等、つまり該当コマンド行を出力しないということです。"Windows バッチ for"とでもしてインターネット検索してみて下さい。
ありがとうございます!! GNU Utilitiesをちゃんとダウンロードできて、環境変数の設定もできて、Windows上のコマンドプロンプトでLinuxのコマンドが使えるという状態になりました。
お仕事(笑)はフリーソフトでできてしまいましたが、こっちのやり方でもバッチファイルを作ったりして試してみたいと思います。
コマンドプロンプトの構文は難しいですね。"windows バッチ for"でインターネット検索してもう少し調べてみようと思います☆
No.5
- 回答日時:
こんにちは。
先ほどの回答(#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さんが紹介されたものも機能的に同等だと思います。
再度ありがとうございます。
コマンドを修正してくださってありがとうございます。あまりそのコマンドの文法がわからないので、なにがおかしいのか自分では確かめようがなかったと思います。
No.4
- 回答日時:
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/ …
しかし、普通の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では成功してちゃんと処理できたので構文は間違ってないと思うのです。
No.3
- 回答日時:
こんにちは。
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/ …
http://www.vector.co.jp/vpack/browse/pickup/pw5/ …
http://www.vector.co.jp/magazine/softnews/060905 …
http://www.forest.impress.co.jp/article/2008/05/ …
他にも色々公開されているようです。"文字列 削除 Windows フリーソフト"などとインターネット検索すればもっと出てくるでしょう。
http://www.vector.co.jp/vpack/filearea/win/util/ …
親切なご回答ありがとうございます。
"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へ。くらいしか今は理解できないレベルです(汗)
No.2
- 回答日時:
コマンドプロンプトもバッチ処理には便利ですよね。
標準ではないですが、DOS 用の sed があります。
OSにも依存しないし軽いので最適だと思います。
http://www.vector.co.jp/soft/dos/util/se000880.h …
ご回答ありがとうございます。
参考URL見てみました。プラットフォームがDOSとなっていると思うのですがXPしか持っていないので使えないような気がします。
知識が無くてすみません。コマンド・プロンプトで多少操作はできるのですが、DOS用のsedというものをどうやって使えるのかがよくわからなくて。
No.1
- 回答日時:
Windows 2000 以後、[DOS]ではなくて「コマンド・プロンプト」です。
「コマンド・プロンプト」の機能を供するものとして[Windows Power Shell]というものがマイクロソフトから提供されています。
「Windows XP 用 Windows PowerShell 1.0 インストール パッケージ」
http://www.microsoft.com/downloads/details.aspx? …
この中で「Clear-Content コマンドレットの使用」が応用できると思います。
http://www.microsoft.com/japan/technet/scriptcen …
ご回答ありがとうございます。
DOSではなくてコマンド・プロンプトと言った方が良いのですね。わからず、すみません。
Widows PowerShellというものがあるのですか。参照のURLを見たのですが今のところよくわかりません・・・。
少なくともXPのコマンド・プロンプトでは私のしたい処理はできないようですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シェルスクリプトでエラーが出ます
-
trコマンドについて
-
UNIXで、ディレクトリを比較し...
-
Linuxで*をつかってファイル移...
-
DOSでテキストファイルの中のあ...
-
バッチで特定文字が含まれる先...
-
コマンドプロンプト net user...
-
標準出力とリダイレクトを同時...
-
unixのdiffコマンドの動作について
-
euctosj を使用してファイル名...
-
OSXで常に最後に表示される文字...
-
awkかsedで
-
Dirコマンドでフォルダ内ファイ...
-
Linux のシェルスクリプトの強...
-
batである文字列内に特定の文字...
-
エクセルの表にヘンな枠が・・・
-
pingは正常なのにtracerouteで...
-
TOPコマンドで表示するCPU使用...
-
ファイル名についている「-」と...
-
空きIPアドレスを探す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シェルスクリプトでエラーが出ます
-
【DOSコマンド】for文の中で変...
-
スラッシュ"/"を削除したい
-
renameコマンドでファイル名か...
-
UNIXで、ディレクトリを比較し...
-
バッチで特定文字が含まれる先...
-
【Linux】findコマンドの表示順
-
Linuxで*をつかってファイル移...
-
*.txtファイルの最終行だけ参照...
-
DOSでテキストファイルの中のあ...
-
OSXで常に最後に表示される文字...
-
BATファイルによるfcコマンドで...
-
○行目から□行目だけを表示する...
-
dosバッチを使用して昇順に
-
DOSバッチにて外のファイルの指...
-
unixのdiffコマンドの動作について
-
コマンドプロンプト net user...
-
ファイルの先頭に文字を追加す...
-
shellでsmbclientでファイル転送
-
行の挿入をおこなう。awk?
おすすめ情報