• ベストアンサー

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

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

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

(1) $ grep -A 3 test2 ./test -Aオプションで、マッチしたところから指定した行数分後ろの行まで表示します。(A=Afterの意) (同様に、-B オプションで、マッチしたところより前の行を表示することもできます。(B=Beforeの意)) (2) 抽出する行が1つだけなら、 tail コマンドとheadコマンドの組み合わせでできます。 $ tail +5 ./test | head -1 で、ファイル「test」の5行目1行だけを抽出できます。 開始行を指定して複数行抽出したい場合なら、 $ tail +5 ./test | head -3 で、ファイル「test」の5行目からの3行分を抽出できます。 (tail コマンドの「+数字」で、指定した行数以降を抽出し、それをパイプでつないで、head コマンドの 「-数字」 先頭から指定行数取り出し) 複数の開始行を指定して、それぞれから1行ずつ抽出したい場合、 bash などの bource shell 系なら、for コマンドを使って、 $ for n in 1 5 9; do tail +$n ./test | head -1; done で、1行目、5行目、9行目を抽出できます。

user010014
質問者

お礼

ありがとうございます! 解決しました!

その他の回答 (1)

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

(2) sedを使う sed -n -e '15p;20p;30,32p' test -n: 「出力しない」オプション。 pコマンドで表示するので、sed標準の出力は抑制する -e: 続く引数をsedのコマンドとみなす 数字:後ろに続くコマンドを実行する入力行数の指定 数字,数字:後ろに続くコマンドを実行する入力行数の範囲指定 p:出力 ;:複数コマンドを指定するときの区切り 上の例では、15,20,30から32行を表示する

user010014
質問者

お礼

ありがとうございます! 解決しました!

関連する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 を表示したい。

  • 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行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?

  • grepの出力について

    パターンマッチについてなんですが、このコマンドはマッチした行を出力するコマンドなんですが。実際にはパターンマッチをした文字列だけを表示したいという場合にはどのようにしたらよいのでしょうか?スクリプトを書くしかないのでしょうか?できればその例を教えてください。お願いします。

  • 一般的なエディタで1行目を対象としたGREP

    一般的なエディタで1行目の文字列検索(GREP)はできるものでしょうか。 (例) テキストファイルの一番上に 「Option Explicit」という文字があれば、リストを表示する。 #ちなみに私はVIVIを使っています。(素人レベル)

  • grepの出力結果の保存

    LinuXのgrepコマンドに関する質問です。 既存のファイルからgrepコマンドで特定の文字列が含まれた行だけを抽出し、その行数を数えるという課題です。 行数を数えるのでwcコマンドを使おうと思ったのですが、wcコマンドは「wc (ファイル名)」という使い方をしますよね。 ということは、grepコマンドで抽出した結果をファイルに保存しなくてはならないのですが、やり方がわかりません。

  • 秀丸のGREP検索

    GREP検索をした時、該当する単語のある行が表示されなくなってしまいました。 viyon.txt(17) suisen.txt(114) のようにファイル名と行番号しか表示されません。 以前は、検索単語と周囲の文字列も表示されてたんですけど・・・・・・ 元に戻せませんか?

  • grepで全角文字の行を抽出

    grepの検索でテキスト内のひとつでも全角文字がある行を 抽出したいと思ってます。1つの方法は見つかったのですが、 時たまバグがあるそうですので、 他の方法を探そうと思ってます。 わかっている方法は、以下のとおりです。 > grep -n '.*[^ -~。-゜].*' test_data.txt よろしくお願いします。

  • grepによる文字列検索のシェル作成の手順

    Solaris9のOSにて、以下の仕様のシェルを作成したいと思っています。 特定のディレクトリ配下にある全てのファイル内で特定の文字列「abc」のある行を抽出し、ファイル化したい。 (検索対象が1ファイルであれば、grep -n abc test.txtでよいですが、ファイル名がたくさんある場合のシェルの作り方がわかりません。) また、どのファイルから検索したのかがわかるように抽出した行の前にファイル名をつけられると大変助かります。 例) ---test1.txtから検索--- 8:XXXXabcXXXX 11:XXXXabcXXX ---test2.txtから検索--- 10:XXXXXXXXabcXX お手数ですが、宜しくお願いします。

  • 【正規表現】検索文字の前後の行を削除したい

    正規表現がらみで困っていることがあります。 とあるディレクト以下にある複数ファイルの中身を検索して、該当する文字列にヒットした場合その文字列の行とその前後の行を削除したいと思っております。 該当文字列は1ファイルの中に複数ありますが、連続はしてないことはわかっております。 ※ちなみにディレクトリ以下としておりますが、ディレクトリの下にはサブディレクトリが数階層あり、サブディレクトリの中のファイルも検索対象です。 現状findとsedで試行錯誤トライ&エラーを繰り返し中 どなたかお力頂戴できれば幸いです。 どうぞよろしくお願いいたします。

  • 教えてください。

    問題9 指定されたテキストファイルの先頭のn行を表示せよ。ファイル名と表示行数nは コマンドライン引数として与える。作成したコマンド(プログラム名)をheadとすると、 入力の書式は以下のようになる。 head [-n] ファイル名 表示行数nの指定は省略可能とし、省略時はn=10とする。また、ファイルの内容が n行に満たないときは、すべての行を表示する。 どのようにプログラムをつくればあまりわかりません。教えてください。