grep文字列にしたいが、前の5行と次の5行、および一致した行も表示します。どうすればこれを実行できますか?
man grep | grep -C 1 context:)
man grep | grep -C 1 "\-C";)
grep文字列にしたいが、前の5行と次の5行、および一致した行も表示します。どうすればこれを実行できますか?
man grep | grep -C 1 context:)
man grep | grep -C 1 "\-C";)
回答:
BSDやGNU grepを使用でき-B num試合前に、どのように多くの行を設定するために-A num試合後の行数のため。
grep -B 3 -A 2 foo README.txt
を使用する前と後で同じ行数が必要な場合-C num。
grep -C 3 foo README.txt
これは、前の3行と後の3行を示します。
-Aそして-B、-C n(nコンテキストの行の場合は)そのまま、または-n(nコンテキストの行の場合は... nが1〜9である限り)機能します。
-nフォーマットを試してみましたが、それが機能するのはまでしかわかりません9。155行を返すため
-A、-Bまたは-C)。通常、オプション指定子の後に値が続きます(-o a.outGCCで出力ファイルを指定するため)が、単純なスイッチ/フラグとして機能することもできます(-gGCCでデバッグ情報を有効にするため)。ただし、オプション間のスペースはオプションであるため、値のないオプションについては、それらをマージ(-ABC)することができます。つまり、-15解釈され-1 -5(2つの別々のオプション)、-5オーバーライドがをオーバーライドします-1。
ackはgrepと同様の引数で機能し、を受け入れます-C。しかし、通常はコードを検索するのに適しています。
grep、「宣伝」するためにそれを使用することackは確かです(これは本当に素晴らしいツールです)は良い考えです…
grep astring myfile -A 5 -B 5
それは「astring」の「myfile」をgrepし、各一致の前後に5行を表示します
私は通常使用します
grep searchstring file -C n # n for number of lines of context up and down
grepのようなツールの多くにも、非常に優れたmanファイルがあります。自分でできることはたくさんあるので、grepのmanページをよく参照しています。
man grep
多くのGNUツールには、manページに加えて、より有用な情報を含むかもしれないinfoページもあります。
info grep
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
「/some/file.txt」で「17655」を検索して、前後に10行のコンテキストを表示し(Awkを使用)、出力の前に行番号とコロンを付けます。「grep」が「-[ACB]」オプションをサポートしていない場合、Solarisでこれを使用します。
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;
これが@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変数を前後の行数で置き換えます。
これは-A、grep -Bや-Cパラメータをサポートしていないシステムで特に役立ちます。
コードを頻繁に検索する場合、銀の銀のサーチャーであるAGは、grepよりもはるかに効率的です(つまり高速です)。
-Cオプションを使用してコンテキスト行を表示します。
例えば:
ag -C 3 "foo" myFile
line 1
line 2
line 3
line that has "foo"
line 5
line 6
line 7