• 締切済み

【DOSコマンド】一致した文字列の次の単語を出力

コマンドの実行結果の標準出力をリダイレクトしてテキストファイルに書き出しました。 このファイルを検索し、マッチした文字列の次の単語を出力したいのですが、 標準のDOSコマンド(あるいはコマンドラインで動作するフリーソフトを使用するのでも構いません)で実現するにはどうすれば良いでしょうか? テキストファイルの内容例 hogehoge: abcdefg この場合、abcdefgを出力したいです。 hogehogeは大文字小文字入り交じっています。

みんなの回答

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.3

コマンドプロンプト(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で異なるようですね)

BLACK69
質問者

お礼

回答ありがとうございます。 スクリプトはこれから習得するのでは時間がかかりますので、今回は見送らせて頂きます。 具体的なコーディング例まで書いて頂いたのですが、各構文がどの様な機能を持ち、どのように動作するか理解しないと解決したことにならないと思いますので。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

sed でも awk でも Perl でもいいと思う.

BLACK69
質問者

お礼

回答ありがとうございます。 スクリプトはこれから取得するのでは時間がかかりますので今回は使う予定はありません。 sedは複雑で使いにくいので、最後の手段にしたいと思っています。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

私だったら Find /i "hogehoge" テキストファイル名 をリダイレクトして、テキストエディタで加工 はじめからテキストエディタでGrepもアリか

BLACK69
質問者

お礼

回答ありがとうございます。 今回はバッチ処理しようとしていますので、エディタで加工では駄目なのです。 バッチ処理というのを「コマンドラインで」という文言に含めたつもりで居たのですが、上手く伝わらなかったようで申し訳ありません。 grep ですと、ヒットした行しか出力出来ないようですので今回の要件には使えないように思います。

関連するQ&A