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
。15
5行を返すため
-A
、-B
または-C
)。通常、オプション指定子の後に値が続きます(-o a.out
GCCで出力ファイルを指定するため)が、単純なスイッチ/フラグとして機能することもできます(-g
GCCでデバッグ情報を有効にするため)。ただし、オプション間のスペースはオプションであるため、値のないオプションについては、それらをマージ(-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