sps*_*sps 1 grep regular-expression
我如何使用“POSIX BRE”或“POSIX ERE”正则表达式匹配的字符串(线或字),它不具有bak
在结束了吗?
我想做一个ls | egrep '<regex>'
查找文件bak
名末尾没有的所有文件。
例如,如果有三个文件file1
、file2_bak
、 和bak_file3
,则正则表达式应该只匹配file1
和bak_file3
(而不是file2_bak
)。
我知道这可以用 来完成ls | grep -v 'bak$'
,但我想在不使用or-v
选项的情况下做到这一点。我不想使用,因为这只是关于 POSIX 正则表达式的理论/学术问题。grep
egrep
-v
这就是我匹配最后确实有的文件名bak
的方式:
$ ls | egrep 'bak$'
file2_bak
$
Run Code Online (Sandbox Code Playgroud)
上面的正则表达式, bak$
, 匹配最后有的所有字符串bak
。但我怎么能写一个匹配所有的字符串正则表达式都没有具备 bak
在结束了吗?
如果您使用ksh
(或启用bash
了扩展通配符,或启用zsh
了ksh 通配符),您可以仅使用文件通配符模式来实现所需的功能:
ls -d -- !(*bak)
Run Code Online (Sandbox Code Playgroud)
使用grep
, 要获得一个简单的解决方案,只需使用否定-v
:
ls | grep -v 'bak$'
Run Code Online (Sandbox Code Playgroud)