• 締切済み

【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

  • [バッチファイル]一致した次の単語を出力したい

    コマンドの実行結果の標準出力をリダイレクトしてテキストファイルに書き出しました。 このファイルを読み取り、マッチした文字列の次の単語を出力したいのですが、 標準のDOSコマンド(あるいはコマンドラインで動作するフリーソフトを使用するのでも構いません。※perlなどのスクリプトや、複雑で習得の難しいもの、コマンドプロンプト拡張などは無しでお願いします)で実現するにはどうすれば良いでしょうか? テキストファイルの内容例 hogehoge: abcdefg この場合、"hogehoge:"で検索し、abcdefgを出力したいです。

  • Windows Dosコマンドで

    WinXP HE あるいは PEでのお話です。 Dosコマンドで(バッチ処理をさせたいのですが)、 あるテキストファイルの1行目の先頭文字2文字を 切り取って標準出力する方法はあるのでしょうか? いろいろ調べてみたのですが、 UNIXほど強力なテキストエディット機能が無いようで困っています。

  • DOSコマンドについて

    DOSコマンドで下記の2つを実現したくて色々と 調べてみたのですがわかりませんでした。 (1)バッチファイルを実行したら、DOSプロンプトの  画面が立ち上がり、検索したい文字を入力できる  状態にする。 (2) (1)で入力された文字列が2文字以上だった場合は  エラーメッセージを表示し、再度入力させる。 (3)(1)で入力した文字列を任意のファイル内で検索し、  あれば大文字⇒小文字に変換する。 echoとpromptというコマンドを使って入力画面を 表示させることができるのかと思いましたが なかなかうまくいかない状態でした。 何か参考になるサイトがあれば教えて頂ければ幸いです。

  • 【コマンドプロンプト】テキストファイル内の文字列置換

    こんにちは。 コマンドプロンプトのバッチファイルでテキストファイル内の文字列の置換を行いたいと考えております。 例えば以下のような内容があった場合、 --開始-- ABCDEFG1111 ABCDEFG ABCDEFG1111 HIJKLMN --終了-- バッチファイル処理結果として 1111 ABCDEFG 1111 HIJKLMN という結果を別ファイルに出力したいのです。 制限としては、sed,awkなどのwindows上で稼動するツールがあるようですが それらは使用できません。 どなたかご存知の方教えていただけないでしょうか よろしくお願い致します。

  • DOSプロンプト 特殊文字の出力

    はじめまして DOSプロンプトでバッチを組もうとしているのですが、 リダイレクトの>の文字をリダイレクトで別ファイルに出力したいのですがうまくいきません。 通常文字として認識するにはどうすればよいのでしょうか? ご教授願います。 イメージ echo test>test>> output.txt ↓ output.txtに出力したい文字 test>test

  • DOSコマンド

    テキストファイル内にある指定された文字列を、指定した文字に置き換えできる DOSコマンドはありませんか? バッチ形式で、検索文字列、置き換え文字列が指定できるのが希望です。 例:テキストファイル内 C:\Documents and Settings\○○ バッチ実行後↓ C:\Documents and Settings\×× ○○を検索して××に置き換えしなさい といった感じです。

  • DOSコマンドで結果として出力される文字列を変数に格納したい

    DOSコマンドで、あるソフト(タスク)が実行されていればプログラムAを、そうでなければプログラムBを実行するバッチを組んでいます。タスクの一覧はtasklistで取得できることが分かり、対象となるタスクおみを抽出する方法も分かりました。しかし、この後どうすれば良いかが分かりません。対象となるタスクが存在した場合としない場合では出力される文字列が違います。この文字列を比較することで分岐が実現できると思ったのですが、それには文字列を変数に格納する必要があります。以下のように記述し、うまくいくことを期待したのですが、駄目でした。 set STATUS=tasklist /fi "Imagename eq タスク名" tasklist /fi "Imagename eq タスク名"の部分が関数であれば、戻り値があってそれを格納することができるのではないかと思ったのですが、できませんでした。このケースに限ったことではありませんが、各コマンドの実行結果として出力される文字列を変数に格納するにはどうすれば良いのでしょうか?VBSやWSHなどではなく、.bat形式の場合でお願いします。

  • コマンドラインに入力されている文字列の1文字を出力

    ○下記のコードについての質問になります #include <stdio.h> int main( int argc, /*コマンドライン引数*/ char *argv[] /*コマンドライン */ ) { int counter; /*ループカウンタ*/ for( counter = 0 ; counter < argc ; counter++) { printf( "argv[%d]:%s\n" , counter , argv[counter] ); } /*----------------------------------------------------------- printf( "コマンドラインの1文字を抜き取る:%c" , ????????); ------------------------------------------------------------*/ return (0); } ○質問 コマンドラインのプログラムになります。 「--」で囲っている部分になりますが、 コマンドラインに入力されている文字列の1文字だけを出力できるように したいのですが、どうすればこれを実現することができるのでしょうか?? 一例として >command.exe orange ringe ^^^^^^ と、コマンドを打ったときに、「^^」の部分になりますが、 orangeの「a」だけを出力させたい場合を、知りたいと思っております。 以上、宜しくお願いします。

  • 正規表現にマッチする文字列の一括出力

    任意の正規表現を与えてやり、そのパターンに合致する文字列を 1行1文字列でテキストファイルに一括出力したいと考えています。 例えば、 [a-z][a-z][a-z] を与えてやると、 aaa aab aac aad ... ... zzx zzy zzz と、26の3乗で17576行の文字列をテキストファイルなどに出力。 LINUXのコマンドラインなら多少分かるのですが、プログラミングは さっぱりで、上記の目的につかえそうなユーティリティも探してみた のですが、見つけることはできませんでした。 よい方法がありましたら、ご教授よろしくお願いいたします。

  • 連番のファイルをDOSコマンドで

    DOSコマンドを利用し、バッチ処理でタスクスケジューラーにて、定期的に、テキストファイルへリダイレクトするのですが、ファイルネームを連番で生成してくれる、コマンド(構文?)をご教授下さい。 例:ipconfig >***.txt (***の部分を連番)