![grep을 사용하여 일치하는 줄 대신 패턴과 일치하는 이전 줄을 표시하려면 어떻게 해야 합니까? [복사]](https://linux55.com/image/7944/grep%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%A4%84%20%EB%8C%80%EC%8B%A0%20%ED%8C%A8%ED%84%B4%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%A0%84%20%EC%A4%84%EC%9D%84%20%ED%91%9C%EC%8B%9C%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
을 사용하고 -A
주변 선을 표시 할 수 있다는 것을 알고 있지만 둘 다 일치하는 선도 표시합니다. 이 예제 파일에서 내가 하고 싶은 일은 다음과 같습니다.-B
-C
foo
bar
나는 이런 일을 할 것이고 grep <option> "bar" file
내 결과는 다음과 같아야합니다
foo
사이드 노트grep
: 다른 사람과 함께 사용하거나 사용하는 방법을 알고 있지만 sed
한 번만 사용하고 싶습니다.grep
답변1
이것은 다음과 같은 사람들에게는 꽤 힘든 일입니다 sed
.
$ printf 'foo\nbar\n' | sed -n '$!N;/\nbar$/P;D'
foo
답변2
또 다른 솔루션
grep -B 1 "bar" test | head -n 1
추가 정규식 또는 일치 테스트가 필요하지 않아 더 효율적이라는 장점이 있지만 여러 일치 항목에서는 작동하지 않습니다.
답변3
또 다른 가능한 해결책:
grep -B 1 "bar" test | sed '/bar/d'
답변4
"bar"를 무시하는 또 다른 grep을 수행할 수 있습니다.
grep -B 1 "bar" test.txt | grep -v "bar"