• ベストアンサー

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
質問者

お礼

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