質問

私はしたいと思います grep 文字列の場合は、一致した行だけでなく、前の 5 行と次の 5 行も表示されます。どうすればこれができるでしょうか?

役に立ちましたか?

解決

のために BSD または GNU grep 使用できます -B num 一致するまでの行数を設定し、 -A num 一致後の行数。

grep -B 3 -A 2 foo README.txt

前後の行数を同じにしたい場合は、次のように使用できます。 -C num.

grep -C 3 foo README.txt

これにより、前後 3 行が表示されます。

他のヒント

-A そして -B 同様に機能します -C n (のために n 文脈の行)、または単に -n (のために n 文脈の行...n が 1 ~ 9 である限り)。

ああ grep と同様の引数を使用して動作し、受け入れます -C. 。ただし、通常はコード全体を検索する場合に適しています。

grep astring myfile -A 5 -B 5

これにより、「myfile」で「astring」が grep され、各一致の前後 5 行が表示されます。

私が普段使っているのは

grep searchstring file -C n # n for number of lines of context up and down

grep などのツールの多くには、非常に優れた man ファイルも含まれています。私は自分自身を参照していることに気づきました grep のマニュアルページ なぜなら、それを使ってできることがたくさんあるからです。

man grep

多くの GNU ツールには 情報ページ man ページに加えて、さらに役立つ情報が含まれている可能性があります。

info grep

「/some/file.txt」で「17655」を検索すると、前後 10 行のコンテキストが表示されます (Awk を使用)。出力の前に行番号が続き、その後にコロンが続きます。Solaris では、「grep」が「-[ACB]」オプションをサポートしていない場合にこれを使用します。

awk '

/17655/ {
        for (i = (b + 1) % 10; i != b; i = (i + 1) % 10) {
                print before[i]
        }
        print (NR ":" ($0))
        a = 10
}

a-- > 0 {
        print (NR ":" ($0))
}

{
        before[b] = (NR ":" ($0))
        b = (b + 1) % 10
}' /some/file.txt;

grep を使用する

$ grep --help | grep -i context
Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM

ripgrep

パフォーマンスを重視する場合は、 ripgrep と似た構文を持つ grep, 、例えば

rg -C5 "pattern" .

-C, --context NUM - 各一致の前後に NUM 行を表示します。

などのパラメータもあります -A/--after-context そして -B/--before-context.

このツールは上に構築されています Rustの正規表現エンジン それはとても良いことです 効率的 大きなデータについて。

$grep thestring thefile -5

-5マッチの上と下の5行を取得します。「thestring」は-c 5または-a 5 -b 5に相当します

grep には というオプションがあります Context Line Control, を使用できます。 --contect その中で、単純に、

| grep -C 5

または

| grep -5

トリックを実行する必要があります

ここにあります @Ygorソリューションawk

awk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=3 a=3 s="pattern" myfile

注記:交換する a そして b 前後の行数を含む変数。

これは、grep をサポートしていないシステムで特に便利です。 -A, -B そして -C パラメーター。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top