- ベストアンサー
grep 検索 検索対象の行と、そのn段下(もしくは上)までの行を合わせて出力したい
ファイル ./test の内容は以下のとおりです。 test1 30 50 12 test2 60 12 01 test3 *** 20 *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか? test2 60 12 01 のように表示させたい。 (2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(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行目を抽出できます。
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
(2) sedを使う sed -n -e '15p;20p;30,32p' test -n: 「出力しない」オプション。 pコマンドで表示するので、sed標準の出力は抑制する -e: 続く引数をsedのコマンドとみなす 数字:後ろに続くコマンドを実行する入力行数の指定 数字,数字:後ろに続くコマンドを実行する入力行数の範囲指定 p:出力 ;:複数コマンドを指定するときの区切り 上の例では、15,20,30から32行を表示する
お礼
ありがとうございます! 解決しました!
お礼
ありがとうございます! 解決しました!