지정된 문자를 포함하지 않는 결과를 얻으려면 부정 ^를 사용하세요.

지정된 문자를 포함하지 않는 결과를 얻으려면 부정 ^를 사용하세요.

이름에 다음이 포함되지 않은 파일을 찾고 싶습니다."^iX500"

$ cat note_list 
...
/Applications/ScanSnap Manual.localized/iX500ScanSnapManual.app/Contents/Resources/manual/basic/EN/ix500/images_mac/EvernoteMark.png
/Applications/ScanSnap 

나는 노력했다

 cat note_list | grep -i "^iX500"
 #not return results

그리고

$ cat note_list | egrep -i "^(iX500)"
#not return result

-v마지막으로 get it done을 사용합니다.

cat note_list | egrep -i -v "(iX500)"

^하지만 grep에서 부정을 어떻게 사용할 수 있습니까 ?

답변1

파일 이름에 사용할 때의 문제점은 줄 지향 도구이고 파일 이름에 개행 문자가 포함될 수 있다는 것입니다 grep.grep

파일의 모든 파일 이름에 개행 문자가 없다고 가정하면 grep -v부정 일치 의미를 사용합니다.

grep -iF -v 'iX500' <note_list

-F정규식이 아닌 일치하는 문자열이기 때문에 추가했습니다 .

^[...]단일 문자와 일치시키기 위해 내부적으로 사용됩니다 .아니요특정 컬렉션에서. 예를 들어, [^a-z]소문자가 아닌 주어진 범위의 단일 문자와 일치합니다(표준 POSIX 로케일을 가정). 다른 곳에서 사용될 때 ^문자열의 시작을 나타냅니다. 예를 들어 ^alpha문자열과 일치합니다.alpha 오직줄의 시작 부분에(다시 말하지만, alpha$줄 끝의 문자열에만 일치합니다)

내 생각에 당신이 찾고 있는 것은 iX500"not"과 일치하는 정규식을 만드는 것입니다. 문제는 귀하의 예에서 대부분의 문자열이 일치한다는 것입니다. 예를 들어, Applications(예제에서 두 줄)에 대한 비트는 "not iX500"입니다.

다음은 문자를 포함하지 않는 모든 줄을 추출합니다 X.

grep '^[^X]*$'

X귀하의 경우에는 "not " 표현이 아닌 일치하는 정규식을 찾아야 합니다.[^X]*전선하지만 어디에도 단어가 일치하지 않습니다 iX500.

GNU를 사용하고 미리보기/뒤돌아보기 기능이 있는 PCRE 표현식을 사용하여 이를 수행하는 것이 가능하지만 먼저 일치시킨 다음 일치를 부정하는 요점이 grep훨씬 쉽습니다.iX500-v

관련 정보