grep을 사용하여 일치하는 줄 대신 패턴과 일치하는 이전 줄을 표시하려면 어떻게 해야 합니까? [복사]

grep을 사용하여 일치하는 줄 대신 패턴과 일치하는 이전 줄을 표시하려면 어떻게 해야 합니까? [복사]

을 사용하고 -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"

관련 정보