- 締切済み
【DOSコマンド】一致した文字列の次の単語を出力
コマンドの実行結果の標準出力をリダイレクトしてテキストファイルに書き出しました。 このファイルを検索し、マッチした文字列の次の単語を出力したいのですが、 標準のDOSコマンド(あるいはコマンドラインで動作するフリーソフトを使用するのでも構いません)で実現するにはどうすれば良いでしょうか? テキストファイルの内容例 hogehoge: abcdefg この場合、abcdefgを出力したいです。 hogehogeは大文字小文字入り交じっています。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- queuerev2
- ベストアンサー率78% (96/122)
コマンドプロンプト(CMD.EXE)でのmore test.txtの出力を処理するとします。 WSH(JScript)でやるなら、たとえば以下の3行をファイル名「hogehogeex.js」で保存します。 while (!WScript.StdIn.AtEndOfStream) if (mt = WScript.StdIn.ReadLine().match(/hogehoge.*?\s(.+?\b)/i)) WScript.StdOut.WriteLine(mt[1]); そしてコマンドプロンプトから more test.txt|cscript //nologo hogehogeex.js と入力します。 PowerShellを使ってよいなら、スクリプトファイルは作らず、コマンドプロンプトから powershell "more.com test.txt | foreach-object {$matches=@{};[void]($_ -match 'hogehoge.*?\s(.+?\b)');$matches[1]}" だけで行けると思います。 PowerShellのコマンドラインからであれば上記の""の中身だけでOKです。 PowerShellはまだ初心者なので自信はありませんが一応動きました。(Windows7, PowerShell v2.0) いずれも正規表現は実際のデータと抽出法に合うかどうか検討が必要です。 (今回初めて気づいたのですが、全角半角混在での\bの挙動がJscriptとPowerShellで異なるようですね)
- Tacosan
- ベストアンサー率23% (3656/15482)
sed でも awk でも Perl でもいいと思う.
お礼
回答ありがとうございます。 スクリプトはこれから取得するのでは時間がかかりますので今回は使う予定はありません。 sedは複雑で使いにくいので、最後の手段にしたいと思っています。
- bin-chan
- ベストアンサー率33% (1403/4213)
私だったら Find /i "hogehoge" テキストファイル名 をリダイレクトして、テキストエディタで加工 はじめからテキストエディタでGrepもアリか
お礼
回答ありがとうございます。 今回はバッチ処理しようとしていますので、エディタで加工では駄目なのです。 バッチ処理というのを「コマンドラインで」という文言に含めたつもりで居たのですが、上手く伝わらなかったようで申し訳ありません。 grep ですと、ヒットした行しか出力出来ないようですので今回の要件には使えないように思います。
お礼
回答ありがとうございます。 スクリプトはこれから習得するのでは時間がかかりますので、今回は見送らせて頂きます。 具体的なコーディング例まで書いて頂いたのですが、各構文がどの様な機能を持ち、どのように動作するか理解しないと解決したことにならないと思いますので。