重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

テキストファイルの内容例
hogehoge: abcdefg

この場合、abcdefgを出力したいです。
hogehogeは大文字小文字入り交じっています。

A 回答 (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で異なるようですね)
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/10/23 19:37

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2014/10/23 19:30

私だったら


Find /i "hogehoge" テキストファイル名
をリダイレクトして、テキストエディタで加工

はじめからテキストエディタでGrepもアリか
    • good
    • 0
この回答へのお礼

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

grep ですと、ヒットした行しか出力出来ないようですので今回の要件には使えないように思います。

お礼日時:2014/10/23 07:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!