![일치하는 줄의 내용을 제외하고 grep -C 또는 -A 또는 -B를 결합할 수 있습니까?](https://linux55.com/image/163359/%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%A4%84%EC%9D%98%20%EB%82%B4%EC%9A%A9%EC%9D%84%20%EC%A0%9C%EC%99%B8%ED%95%98%EA%B3%A0%20grep%20-C%20%EB%98%90%EB%8A%94%20-A%20%EB%98%90%EB%8A%94%20-B%EB%A5%BC%20%EA%B2%B0%ED%95%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
따라서 grep을 사용하면 -A를 사용하여 "이후"와 일치하는 행을 얻을 수 있고 -B를 사용하여 "이전"과 일치하는 행을 얻을 수 있습니다. -C를 사용하여 전후의 행을 가져올 수도 있습니다.
이런 데이터가 좀 있어요
boring data
boring data
boring data
interesting value
MARK
boring data
boring data
boring data
interesting value
MARK
다음과 같은 출력을 얻고 싶습니다.
interesting value
interesting value
-BI 옵션을 사용하면 다음을 얻을 수 있습니다.
# cat somefile | grep -B 1 MARK
interesting value
MARK
interesting value
MARK
MARK 라인을 완전히 제외하고 싶습니다.
답변1
grep
-v
첫 번째 것 뒤에 역을 추가 할 수 있습니다 grep
.
$ grep -B1 --no-group-separator 'MARK' somefile | grep -v 'MARK'
interesting value
interesting value
--no-group-separator
일치 항목 사이에 구분 기호를 생략하는 기능을 추가했습니다 .
답변2
사용하기 불편하다면 grep
awk와 같은 다른 도구를 사용할 수 있습니다.
awk '/MARK/ { print saved_line }
{ saved_line=$0 }'
라인이 일치하면 저장된 라인을 인쇄하고 다시 필요할 경우를 대비하여 각 라인에 저장한다는 의미입니다.