我想 grep 名称不包含的文件"^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
完成它
cat note_list | egrep -i -v "(iX500)"
但我怎么能^
在 grep 中使用否定。
grep
在文件名上使用的问题是它grep
是一个面向行的工具,文件名可能包含换行符。假设文件中的所有文件名都没有换行符,那么您将使用
grep -v
否定匹配感:我已经添加了
-F
,因为它是一个字符串,而不是我们匹配的正则表达式。^
用于在内部匹配不在特定集合[...]
中的单个字符。例如,将匹配给定范围内不是小写字母的单个字符(假设标准 POSIX 语言环境)。当在别处使用时,表示字符串的开头,以便例如仅在行首匹配字符串(同样,将仅在行尾匹配字符串)。[^a-z]
^
^alpha
alpha
alpha$
我认为您正在寻找的是制作一个匹配“not
iX500
”的正则表达式。这个问题是你的例子中的大多数字符串都会匹配。例如,Applications
(在示例中的两行上)的位是“notiX500
”。以下提取所有不包含字母的行
X
:在您的情况下,您必须想出一个匹配整行但不匹配任何地方的单词的正则表达式,而不是 "not
X
" 表达式。[^X]*
iX500
使用 GNU 可能以某种方式
grep
使用带有前瞻/后视的 PCRE 表达式,但iX500
使用-v
.