こんにちは、bashプログラミングは初めてです。特定のテキストを検索する方法が必要です。そのためにgrep
関数を使用します。
grep -i "my_regex"
動作します。しかし、このようなdata
が与えられた場合:
This is the test data
This is the error data as follows
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
(grep -i error data
を使用して)Word error
を見つけたら、Word error
に続く10行を見つけたいと思います。したがって、私の出力は次のようになります。
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
それを行う方法はありますか?
-B
および-A
を使用して、一致の前後に行を印刷できます。
grep -i -B 10 'error' data
一致する行自体を含む、一致する前の10行を印刷します。
これは、一致する行の後に10行の後続コンテキストを出力します
grep -i "my_regex" -A 10
行を照合する前に先頭のコンテキストを10行印刷する必要がある場合、
grep -i "my_regex" -B 10
また、10行の先頭および末尾の出力コンテキストを印刷する必要がある場合。
grep -i "my_regex" -C 10
例
user@box:~$ cat out
line 1
line 2
line 3
line 4
line 5 my_regex
line 6
line 7
line 8
line 9
user@box:~$
通常のgrep
user@box:~$ grep my_regex out
line 5 my_regex
user@box:~$
Grep完全一致行と2行後
user@box:~$ grep -A 2 my_regex out
line 5 my_regex
line 6
line 7
user@box:~$
Grep完全一致行と2行前
user@box:~$ grep -B 2 my_regex out
line 3
line 4
line 5 my_regex
user@box:~$
Grep完全一致行と前後の2行
user@box:~$ grep -C 2 my_regex out
line 3
line 4
line 5 my_regex
line 6
line 7
user@box:~$
参照:マンページgrep
-A num
--after-context=num
Print num lines of trailing context after matching lines.
-B num
--before-context=num
Print num lines of leading context before matching lines.
-C num
-num
--context=num
Print num lines of leading and trailing output context.
これを行う方法は、manページの上部にあります
grep -i -A 10 'error data'
これを試して:
grep -i -A 10 "my_regex"
-A 10は、「my_regex」との一致後に10行を印刷することを意味します