그렇다면 grep()에서 inverse를 사용하면 egrep -v
실제로 출력이 거꾸로(뒤집힌) 나타남을 의미합니까?
아래 예시를 보니 더욱 헷갈렸던 것 같아요
$ egrep -v '\ ' blah.sh
$ egrep -v '(\ )|^$' blah.sh
'\'의 기능과 -v를 입력하면 어떤 일이 발생하는지 혼란스럽습니다. 또한 |^$ 명령을 제외하면 '\' 명령과 '(\ )' 명령의 차이점은 무엇입니까?
답변1
von Brand가 말했듯 -v
이 패턴과 일치하지 않는 선을 인쇄하는 것을 의미합니다. 이는 예를 통해 가장 잘 설명됩니다. 라는 파일이 있고 foo.txt
그 내용은 다음과 같다고 가정해 보겠습니다.
aaa
bbb
aabb
grep
이제 이 파일에서 일부 문자열을 입력해 보겠습니다 .
$ egrep 'a' foo.txt ## print lines that contain 'a'
aaa
aabb
$ egrep -v 'a' foo.txt ## print lines that do not contain 'a'
bbb
이제 귀하가 게시한 특정 정규식은 그 자체로는 의미가 없습니다. 어디서 찾을 수 있나요? 어쨌든, 많은 정규 표현식에서\
탈출하다다음 문자 "\"는 많은 쉘에서 공백을 입력하는 방법입니다. 이는 GNU를 사용할 때 필요하지 않지만 grep
공백 '\ '
을 찾는 것을 의미합니다. 예를 들어:
$ cat foo.txt
aaa
bb cc
$ grep '\ ' foo.txt
bb cc
$ grep ' ' foo.txt # same as the previous one, at least for GNU grep
bb cc
$ grep -v '\ ' foo.txt # print lines that do not contain spaces
aaa
|
^
문자열의 시작 부분과 $
끝 부분을 일치시키는 논리적 OR을 나타냅니다 . 따라서 \ |^$
최소한 하나의 공백이나 빈 줄을 포함하는 모든 줄은 일치됩니다.
$ cat foo.txt
aaa
bbb
cc dd
$ egrep '\ |^$' foo.txt # print lines that are either empty, or have spaces
dd ee
$ egrep -v '\ |^$' foo.txt # print lines that are neither empty, nor have spaces
aaa
bbb
괄호를 사용하면 패턴을 캡처할 수 있습니다.
Back References and Subexpressions
The back-reference \n, where n is a single digit, matches the
substring previously matched by the nth parenthesized
subexpression of the regular expression.
게시한 정규식에서는 유용한 작업을 수행하지 않습니다. 사용법의 예는 다음과 같습니다.
$ cat foo.txt
aaaa
aa bb
aabbccbb
$ egrep '(bb)..\1' foo.txt
aabbccbb
정규식은 (bb)..\1
문자열 bb
, 임의의 두 문자( )를 일치시킨 다음 ..
문자열을 다시 일치시키는 것( )을 의미합니다.bb
\1
답변2
grep pattern file(s)
다음 줄을 표시하십시오성냥이것은 다음을 수행하는 라인을 보여줍니다 pattern
.grep -v pattern file(s)
불일치모델. 두 출력을 올바른 순서로 병합하면 file(s)
후자의 결과를 얻게 됩니다.