コマンドプロンプトで複数行の情報を取得する方法

このQ&Aのポイント
  • コマンドプロンプトを使用して、指定した行とその下の行を取得する方法を説明します。
  • また、特定の行を複数指定して取得する方法や、具体的な条件に基づいて行を判定する方法も解説します。
  • さらに、取得した行に特定のパターンが含まれるかどうかを判定し、条件に応じた処理を行う手法についても述べます。
回答を見る
  • ベストアンサー

cmd 検索対象の行と、そのn段下(もしくは上)までの行を合わせて出力したい

win 2000 xp vista を使用します。 コマンドプロンプトで下記の処理を行いたいのですが、どのようにコマンドを打てばよいのでしょうか? ファイル .\test の内容は以下のとおりです。 test1 30 50 12 test2 60 12 01 test3 *** 20 *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか? test2 60 12 01 のように表示させたい。 (2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか? (3)とりだした行の中に =***となる部分があれば echo TEST NG!! を実行したい。 なければ echo TEST OK を表示したい。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

(1) Windows移植版のgrepを探してきて( 例えば http://gnuwin32.sourceforge.net/ ) http://oshiete1.goo.ne.jp/qa5810772.html を参考に grep -B 3 test2 test (2) Windows移植版のtail,head,sedを探してきて(以下同文) (3) コマンドの終了コードは変数%ERRORLEVEL%に入るので とりだした中に***が含まれるかを判定するコマンド(例えばgrep)を実行して、その直後の%ERRORLEVEL%で分岐すればよい SET MSG="NG!!" grep -B 3 test2 test | grep -qe "\*\*\*" IF %ERRORLEVEL%==0 SET MSG="OK" echo %MSG% コマンドプロンプト(と標準のコマンド)だけでは、ちょっと大変です。 やるとすれば、 wscript/cscript用のスクリプトを書いて、となるでしょうか。

user010014
質問者

補足

ありがとうございます! http://gnuwin32.sourceforge.net/ お~こんな、便利なものがあるんですね~ 今回grepだけ落としましたが、 全てのunixコマンドをwin上で利用可能ということでしょうか?!

関連するQ&A

  • grep 検索 検索対象の行と、そのn段下(もしくは上)までの行を合わせて出力したい

    ファイル ./test の内容は以下のとおりです。 test1 30 50 12 test2 60 12 01 test3 *** 20 *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか? test2 60 12 01 のように表示させたい。 (2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?

  • AIX ksh利用 grep 検索で マッチした行とn段下(上)の行を合わせて表示したい

    kshで以下の処理を行いたいのですが、bshで使えるオプションが使えないようです。どうすれば?? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ファイル ./test の内容は以下のとおりです。 test1 30 50 12 test2 60 12 01 test3 *** 20 *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか? test2 60 12 01 のように表示させたい。 (2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?

  • For文について (DOS起動)

    テキストファイルの内容を1行ずつ取り出したいと思い、以下のコマンドを実行しました。  for /f %i in (test.txt) do echo %i このコマンドをWin7及びXPのOS上コマンドプロンプトで実行した場合は問題ありませんが、MS-DOS6.22やWin98、WinMEのDOS起動ディスクなどの場合、Syntax errorとなります。 ※test.txtの内容は、TABやSpaceなし、半角英数字のみの文字列で4行程度保存しています。 この為、DOS起動ディスクでは、For文を使えないのかと思い、以下コマンドを実行した所、正常に動作しました。  for %i in (1 2 3 4) do echo %i この事から、For文にてテキストファイルの読み込みが出来ない状況のようです。 どのようにすれば、テキストファイルを読み込む事が出来ますでしょうか。 宜しくお願い致します。

  • .batファイル作成 echo. の使い方

    .batファイルを編集しています。 表示させたい文字列の間に改行を含みたいので、 echo. を記述します。 win/2000 でデスクトップdirから編集していて、テストのためファイルをクリックして実行すると何の問題もないのですが、 .batファイルをcmdを立ち上げた時のデフォルトのカレントdirである、ユーザのhomedirに移し、cmdからコマンドで実行すると echo. を書いた部分はコマンドとして認識されずエラー表示がでます。 原因と対処についてお教えいただければと思います。

  • ラベルが表示されない

    Visual Basic 2010 Express windows7 Pro ボタンをクリックしたときに、まずラベルに表示させ、 Label1.Text = "実行中です" Shell("cmd /c @echo aaa > sss.txt", AppWinStyle.Hide, True) ・ ・ 複数のコマンドプロンプトを実行 ・ Shell("cmd /c @echo aaa > sss.txt", AppWinStyle.Hide, True) Label1.Text = "終了しました" 終わったら、またラベルに表示させたいのですが、実行中が表示されず 終わった時の終了しましたしか表示されません。 実行している時間は1分以上あるので、終了まで時間が短すぎてすぐ消えている訳ではありません。 実行中の次の行に MsgBox("テスト")として、動作が止まると、ラベルに実行中と表示されます。 止めずに実行中と表示させる方法はあるでしょうか?

  • コマンドプロンプトからクリップボードへのコピー

    やりたいこと:コマンドプロンプトから「&」を含む文字をクリップボードへコピーしたい クリップボードのコピーは下記を使用 echo <文字列>| clip 通常はこれでクリップボードへコピーできますが、 文字列"&"を入れるとコピーできません。 対処法はありますか? (参考) (1)echo aaa -->OK(aaa が表示される) (2)echo aa&a -->NG(コマンドエラー) (3)echo aa^&a -->OK(aa&a が表示される) (4)echo aaa| clip -->OK(クリップボードの内容:aaa) (5)echo aa&a| clip -->NG(コマンドエラー) (6)echo aa^&a| clip -->NG(コマンドエラー) (7)echo "aa^&a"| clip -->NG(クリップボードの内容:"aa&a") (3)はOKなのに"| clip"をつけた(6)はエラーになる (7)はダブルクォーテーションがつくのでNG

  • 1列目の何行目に検索文字があるかを取得したい

    しかしエラーになってしまいます。 エラーの原因がわかりません。 シートの1列目のどこかに「test」と入っている行があるのですが Sub test1() Dim myRow As Long With Sheets("Sheet") myRow = .Column(1).Find(What:="test").Row MsgBox .Cells(myRow, 1) End With End Sub このvbaコードを実行するとエラーになります。 コードとしては「.Column(1)」で1列目と言う意味で、 .Find(What:="test")で、何行目に「test」があるかを取得するという意味だと思うのですが 実行時エラー438が発生します。 実際にtestと言う文字は2行目にあるのですが なぜmyRowに2が代入されないのでしょうか?

  • コマンドプロンプトのcallと遅延展開

    こんにちは。 コマンドプロンプトにおいて、call と !・・・! による環境変数の遅延展開について、 1つ疑問に思う事がありましたので、質問させて頂きました。 まず、以下のようなバッチスクリプトtest.batを作成しました。 -------------------------------------------------------- @echo off setlocal setlocal enabledelayedexpansion set aaa=XXX^|cat echo 1:!aaa! call echo 2:!aaa! echo 3:%aaa% call echo 4:%aaa% --------------------------------------------------------- これを実行した結果、以下のようになりました。 --------------------------------------------------------- C:\Users\kei >test.bat 1:XXX|cat 3:XXX 4:XXX --------------------------------------------------------- callは、それ以降のコマンドラインを2度解析するだけなのに、 なぜ、call echo 2:!aaa! の行を実行した時に、何も出力されないのでしょうか?

  • echoで「-n」を出力する方法

    echoで「-n」を出力するようにしたいのですが、 echo -nとすると「-n」がオプションと解釈されて何も表示されませんし、 echo -- -nとすると「-- -n」と表示されてしまいます。 echoで「-n」を表示させたい場合はどのように指定すれば良いのでしょうか? (前後にスペースが入ってしまう、他のコマンドを使うなどはNG) よろしくお願いいたします。

  • Linux ファイルの中に文字列を挿入したい

    たとえば下記のように変更前→変更後(★の部分追加)にしたいです。 コマンドでなんとかしたいのですが、 sedでも検索行の下の行に挿入するしかできない?気がします。 もっともやりたいことは、 (1)echo -n "Test user dayo:"とその下の (2) echoを検索で引っかけて、 その(2)の下の行(★のところ)に追加できれば最高ですが、sed自体2行は無理だと思うので、 (1)を検索して、そのの二つ下の行(★のところ)に挿入できればと考えています。 変更前++++++++++++++++++++++++++++ echo -n "Test user dayo:" echo ;; stopdayo) ++++++++++++++++++++++++++++ 変更後++++++++++++++++++++++++++++ echo -n "Test user dayo:" echo ★kokoniiretaiyo ★kokoniiretaiyo2 ;; stopdayo) ++++++++++++++++++++++++++++