특정 텍스트를 파악하고 해당 줄과 다음 줄을 표시하는 방법

특정 텍스트를 파악하고 해당 줄과 다음 줄을 표시하는 방법

다음과 유사한 파일이 있습니다.

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언제든지 다른 방법을 시도해 볼 수 있습니다.

  • grepPOSIX , 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.

관련 정보