-o
grep 과 플래그를 결합하고 싶습니다 -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
전 세계적으로 아무것도 대체하지 않음, 그 다음에- 빈 줄마다 삭제하십시오.