이름에 다음이 포함되지 않은 파일을 찾고 싶습니다."^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