grepping하는 동안 줄 번호와 함께 인접한 줄을 출력합니다.

grepping하는 동안 줄 번호와 함께 인접한 줄을 출력합니다.

파일 내용을 파악하는 동안 줄 번호와 함께 인접한 줄을 출력하는 방법이 있습니까? 다음 형식의 출력을 얻으려고합니다.

$ ~/myscript.sh download file # 'download' being the pattern here
121: # and downloads with wget/curl, whichever is available.
122: download_file () {
123:  if which wget &>/dev/null; then
----------
356: # Since the prerequisites are already installed, we may proceed
357: download_urls=("http://example.com/foo/bar.bz2"
358:                "http://d1.example.com/xyz/abc.tar.gz"

물론, 나는 옵션을 사용하여 패턴을 grep -n하고 얻은 라인 번호에서 인접한 라인 중 일부를 표시할 수 있다는 것을 알고 있습니다(예: 다음 방법 중 하나를 사용하여).여기), 하지만 이를 수행하는 더 좋은 방법이 있습니까?

답변1

grep다음에서 GNU의 Context Line Control을 사용할 수 있습니다 man grep.

-A NUM, --after-context=NUM
라인을 일치시킨 후 후행 컨텍스트의 NUM 라인을 인쇄합니다. 연속된 일치 그룹 사이에 그룹 구분 기호(--)가 포함된 줄을 배치합니다. -o 또는 --only-matching 옵션을 사용하면 아무런 효과가 없으며 경고가 표시됩니다.


-B NUM, --before-context=NUM
행을 일치시키기 전에 선행 컨텍스트의 NUM 행을 인쇄합니다. 연속된 일치 그룹 사이에 그룹 구분 기호(--)가 포함된 줄을 배치합니다. -o 또는 --only-matching 옵션을 사용하면 아무런 효과가 없으며 경고가 표시됩니다.

양쪽에 동일한 수의 줄이 필요한 경우 단일 컨텍스트 번호를 사용할 수 있습니다.

-C NUM, -NUM, --context=NUM
출력 컨텍스트의 NUM줄을 인쇄합니다. 연속된 일치 그룹 사이에 그룹 구분 기호(--)가 포함된 줄을 배치합니다. -o 또는 --only-matching 옵션을 사용하면 아무런 효과가 없으며 경고가 표시됩니다.

-n플래그( ) 와 결합하면 --line-number주변 컨텍스트와 번호가 일치합니다.

귀하의 예에서 :

grep -n -C1 download

관련 정보