다음과 유사한 파일이 있습니다.
abcdef
123
ghiflk
234
sfhskdhf
483
문자열을 검색하고 싶은데 출력에 다음 줄(및/또는 이전 줄)도 포함되어야 합니다.
예를 들어:
grep "bcd" myfile
Output:
abcdef
123
또는 이전 줄을 표시합니다.
grep "ifl" myfile
Output:
123
ghiflk
며칠 동안 온라인에서 해결책을 찾으려고 노력했지만 찾을 수 없는 것 같습니다.
답변1
GNU 및 BSD 유틸리티에는 다음 줄과 일치하는 옵션과 이전 줄과 일치하는 옵션이 grep
있습니다 . 따라서 다음을 수행할 수 있습니다.-A
-B
$ grep -A 1 bcd myfile
abcdef
123
게임이 끝나면 이 줄을 보여주고
$ grep -B 1 ifl myfile
123
ghiflk
경기 전 라인을 보여줍니다. 마지막으로 -C
다음을 사용하여 일치 전후에 N 줄을 표시 할 수 있습니다 .
$ grep -C 1 ifl myfile
123
ghiflk
234
사용 중인 버전이 이 기능을 지원하지 않는 경우 grep
언제든지 다른 방법을 시도해 볼 수 있습니다.
grep
POSIX ,sed
옵션 및 셸 사용 :n=$(grep -n bcd foo | cut -d':' -f1); sed -n "${n},$((n + 1))p" myfile
AWK 사용
awk '/bcd/ {print; getline; print}' myfile
더 많은 것이 있습니다.
답변2
Steven D가 언급한 옵션 외에도 GNU grep은 일치하는 행 앞뒤에 인쇄할 행 수를 지정하는 -n 옵션에 대한 (문서화되지 않은) 인수를 허용합니다. 물론 -n을 사용하면 줄 번호가 켜지므로 줄 번호가 필요하지 않으면 -A 및 -B 옵션이 더 좋습니다.
예를 들어 grep -n1 pattern
다음과 같이 행동하십시오.grep -n -A1 -B1 pattern
don_crissti가 댓글에서 언급했듯이 이것은아니요실제로는 이 옵션에 대해 문서화되지 않은 매개변수입니다 -n
. -NUM
(여기서 NUM
정수)는 실제로 option 의 동의어 -C NUM
이므로 -nNUM
실제로 의 약어입니다 -n -C NUM
.