- ベストアンサー
grep 検索 検索対象の行と、そのn段下(もしくは上)までの行を合わせて出力したい
ファイル ./test の内容は以下のとおりです。 test1 30 50 12 test2 60 12 01 test3 *** 20 *** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (1)例えば "test2"という文字列を含む行と、合わせて下3行を拾って表示させたい時は、どのようにコマンドを打てばよいのですか? test2 60 12 01 のように表示させたい。 (2)あらかじめ、とりだしたい情報がn行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?
- user010014
- お礼率78% (111/142)
- Linux系OS
- 回答数2
- ありがとう数5
- みんなの回答 (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行を表示する
お礼
ありがとうございます! 解決しました!
関連する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 を表示したい。
- ベストアンサー
- Windows系OS
- 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行目にあるとわかっている時に、 取り出したい行を複数指定して表示させるにはどのようにコマンドを打てばよいですか?
- ベストアンサー
- その他(OS)
- grepの出力について
パターンマッチについてなんですが、このコマンドはマッチした行を出力するコマンドなんですが。実際にはパターンマッチをした文字列だけを表示したいという場合にはどのようにしたらよいのでしょうか?スクリプトを書くしかないのでしょうか?できればその例を教えてください。お願いします。
- 締切済み
- その他(OS)
- 一般的なエディタで1行目を対象としたGREP
一般的なエディタで1行目の文字列検索(GREP)はできるものでしょうか。 (例) テキストファイルの一番上に 「Option Explicit」という文字があれば、リストを表示する。 #ちなみに私はVIVIを使っています。(素人レベル)
- ベストアンサー
- その他(プログラミング・開発)
- grepの出力結果の保存
LinuXのgrepコマンドに関する質問です。 既存のファイルからgrepコマンドで特定の文字列が含まれた行だけを抽出し、その行数を数えるという課題です。 行数を数えるのでwcコマンドを使おうと思ったのですが、wcコマンドは「wc (ファイル名)」という使い方をしますよね。 ということは、grepコマンドで抽出した結果をファイルに保存しなくてはならないのですが、やり方がわかりません。
- 締切済み
- Linux系OS
- 秀丸のGREP検索
GREP検索をした時、該当する単語のある行が表示されなくなってしまいました。 viyon.txt(17) suisen.txt(114) のようにファイル名と行番号しか表示されません。 以前は、検索単語と周囲の文字列も表示されてたんですけど・・・・・・ 元に戻せませんか?
- ベストアンサー
- その他(ソフトウェア)
- grepで全角文字の行を抽出
grepの検索でテキスト内のひとつでも全角文字がある行を 抽出したいと思ってます。1つの方法は見つかったのですが、 時たまバグがあるそうですので、 他の方法を探そうと思ってます。 わかっている方法は、以下のとおりです。 > grep -n '.*[^ -~。-゜].*' test_data.txt よろしくお願いします。
- 締切済み
- Linux系OS
- grepによる文字列検索のシェル作成の手順
Solaris9のOSにて、以下の仕様のシェルを作成したいと思っています。 特定のディレクトリ配下にある全てのファイル内で特定の文字列「abc」のある行を抽出し、ファイル化したい。 (検索対象が1ファイルであれば、grep -n abc test.txtでよいですが、ファイル名がたくさんある場合のシェルの作り方がわかりません。) また、どのファイルから検索したのかがわかるように抽出した行の前にファイル名をつけられると大変助かります。 例) ---test1.txtから検索--- 8:XXXXabcXXXX 11:XXXXabcXXX ---test2.txtから検索--- 10:XXXXXXXXabcXX お手数ですが、宜しくお願いします。
- ベストアンサー
- Solaris系OS
- 【正規表現】検索文字の前後の行を削除したい
正規表現がらみで困っていることがあります。 とあるディレクト以下にある複数ファイルの中身を検索して、該当する文字列にヒットした場合その文字列の行とその前後の行を削除したいと思っております。 該当文字列は1ファイルの中に複数ありますが、連続はしてないことはわかっております。 ※ちなみにディレクトリ以下としておりますが、ディレクトリの下にはサブディレクトリが数階層あり、サブディレクトリの中のファイルも検索対象です。 現状findとsedで試行錯誤トライ&エラーを繰り返し中 どなたかお力頂戴できれば幸いです。 どうぞよろしくお願いいたします。
- 締切済み
- HTML
お礼
ありがとうございます! 解決しました!