정규식 grep ^[^a]*$

정규식 grep ^[^a]*$

이 디렉토리에

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]*aa

grepnon 으로 시작하는 줄 의 경우 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모든 항목 과 일치합니다. -wGNU 옵션은 grep일치하는 단어를 단어로 제한하며, 이 -o옵션을 사용하려면 grep각 줄에서 일치하는 부분만 추출해야 합니다.

관련 정보