アプリ版:「スタンプのみでお礼する」機能のリリースについて

ファイル ./test の内容は以下のとおりです。

test1
30
50
12
test2
60
12
01
test3
***
20
***

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか?

test2
60
12
01
のように表示させたい。

(2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、
取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?

A 回答 (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行目を抽出できます。
    • good
    • 0
この回答へのお礼

ありがとうございます!

解決しました!

お礼日時:2010/04/09 05:08

(2) sedを使う


sed -n -e '15p;20p;30,32p' test

-n: 「出力しない」オプション。 pコマンドで表示するので、sed標準の出力は抑制する
-e: 続く引数をsedのコマンドとみなす
数字:後ろに続くコマンドを実行する入力行数の指定
数字,数字:後ろに続くコマンドを実行する入力行数の範囲指定
p:出力
;:複数コマンドを指定するときの区切り

上の例では、15,20,30から32行を表示する
    • good
    • 1
この回答へのお礼

ありがとうございます!

解決しました!

お礼日時:2010/04/09 05:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!