ファイルを grep しますが、周囲にいくつかの行が表示されますか?
-
08-06-2019 - |
質問
私はしたいと思います 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
パラメーター。