역방향 grep에 대해 혼란스러워함

역방향 grep에 대해 혼란스러워함

그렇다면 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)후자의 결과를 얻게 됩니다.

관련 정보