파일 내용을 파악할 때 줄 번호와 함께 인접한 줄을 출력하는 방법이 있습니까? 다음 형식의 출력을 얻으려고합니다.
$ ~/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