이 디렉토리에
mael@mael-HP:~/repertoireVide$
violon 및 avion이라는 단어가 포함된 MySQLServe라는 파일입니다.
mael@mael-HP:~/repertoireVide$ cat MySQLServ
violon avion
이 grep 명령이 현재 디렉터리에 적용되는 이유는 무엇입니까?
$ grep -r ^[^a]*$
$ grep -r '^[^a]*$'
아무런 출력도 제공하지 않습니까?
[^a] 뒤의 ^는 검색에서 생략되어야 avion
하지만 인수의 *$ 부분은 가능한 결말이 있는 다른 단어를 허용해야 합니다. 여기서는 왜 violon
제외됐나요?
감사해요.
답변1
^[^a]*$
정규식 (두 번째 시도에서 작은따옴표로 묶어야 함) 이 a
문자가 아닌 항목(또는 빈 줄)만 포함된 줄과 일치하고 텍스트 문자열이 비어 있지 않기 때문에 결과를 얻을 수 없습니다 a
.
이 경우 *
이전 표현식에 대해 작동합니다. 0개 이상의 비문자와 일치합니다. 표현식을 줄의 시작과 끝 부분에 고정했으므로 문자가 포함된 모든 줄은 거부됩니다.[^a]
[^a]*
a
a
grep
non 으로 시작하는 줄 의 경우 a
다음을 사용하세요.
grep -r '^[^a]' .
전체 줄을 명시적으로 일치시킬 필요는 없지만 그렇게 하려면 다음을 사용하세요.
grep -r '^[^a].*$' .
.*
0개 이상 일치어느문자(포함 a
).
또한 출력에 빈 줄이 표시됩니다(분명히 로 시작하지 않음 a
).
grep -r -v '^a' .
즉, a
줄의 시작 부분에서 an 을 일치시키고 일치의 의미를 반대로 바꿉니다 -v
. 이렇게 하면 한 줄에 문자가 전혀 없어야 합니다( 일치하려면 [^a]
문자가 하나 이상 있어야 함). 문자가 있는 경우 첫 번째 문자는 가 아니어야 합니다 a
.
검색하기성격로 시작하지 않고 a
다음을 사용하세요.
grep -r -w -o '[^a][[:alpha:]]*' .
이 표현식은 0개 이상의 알파벳 문자 이외의 문자로 시작 하고 계속되는 a
모든 항목 과 일치합니다. -w
GNU 옵션은 grep
일치하는 단어를 단어로 제한하며, 이 -o
옵션을 사용하려면 grep
각 줄에서 일치하는 부분만 추출해야 합니다.