Grep: -o 및 -v 플래그 결합이 작동하지 않습니다.

Grep: -o 및 -v 플래그 결합이 작동하지 않습니다.

-ogrep 과 플래그를 결합하고 싶습니다 -v. 하지만 아무런 결과도 얻지 못합니다. 나는 파일을 가지고 있습니다 :

foo
bar
foobar

나는 전화한다:grep -vo foo ./file

나는 무엇을 기대합니까?

bar
bar

또는


bar
bar

하지만 아무런 결과도 얻지 못합니다.

grep의 매뉴얼 페이지에서 :

   -o, --only-matching
          Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
...
   -v, --invert-match
          Invert the sense of matching, to select non-matching lines.

플래그를 하나만 사용하면 예상한 대로 동작합니다. 하지만 두 플래그 모두에서 grep을 작동시키는 방법은 무엇입니까? 저는 Debian AMD64에서 grep(GNU grep) 3.3을 사용하고 있습니다.

답변1

당신이 말하고 싶은 것은 grep:

  • foo그것을 포함하는 각 줄만 인쇄하고
  • 없는 행을 인쇄합니다.foo

grep에게 말하려는 내용은 다음과 같습니다.

  • 일치하지 않는 줄 foo또는 를 포함하지 않는 줄의 일부를 인쇄합니다.foo

이는 다음과 같이 줄일 수 있습니다.

  • 모든 줄을 인쇄하되 삭제하세요 foo.

내 생각에 sed이 작업을 수행하는 데 완벽한 도구는 다음과 같습니다.

$ sed 's/foo//g' ./file

bar
bar

이것은 말한다:각 줄에 대해 foo전역적으로 아무것도 대체하지 않음.에 의해전 세계적으로이는 라인의 모든 인스턴스를 의미합니다.

빈 줄도 삭제하려면 다음을 수행하세요.

$ sed -e 's/foo//g' -e '/^$/d' ./file
bar
bar

이것은 말한다:

  • foo전 세계적으로 아무것도 대체하지 않음, 그 다음에
  • 빈 줄마다 삭제하십시오.

관련 정보