줄 번호와 함께 인접한 줄을 출력하는 grep

줄 번호와 함께 인접한 줄을 출력하는 grep

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

$ ~/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"

물론, 나는 -n패턴을 grep하고 얻은 줄 번호에서 인접한 줄을 표시하는 옵션을 사용할 수 있다는 것을 알고 있습니다(예: 임의의 방법을 사용하여)여기), 그런데 더 좋은 방법이 있나요?

답변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

관련 정보