如何使用正则表达式匹配末尾没有特定字符串的模式

sps*_*sps 1 grep regular-expression

我如何使用“POSIX BRE”或“POSIX ERE”正则表达式匹配的字符串(线或字),它具有bak在结束了吗?

我想做一个ls | egrep '<regex>'查找文件bak名末尾没有的所有文件。

例如,如果有三个文件file1file2_bak、 和bak_file3,则正则表达式应该只匹配file1bak_file3(而不是file2_bak)。

我知道这可以用 来完成ls | grep -v 'bak$',但我想在不使用or-v选项的情况下做到这一点。我不想使用,因为这只是关于 POSIX 正则表达式的理论/学术问题。grepegrep-v

这就是我匹配最后确实有的文件名bak的方式:

$ ls | egrep 'bak$'
file2_bak
$ 
Run Code Online (Sandbox Code Playgroud)

上面的正则表达式, bak$, 匹配最后有的所有字符串bak。但我怎么能写一个匹配所有的字符串正则表达式没有具备 bak在结束了吗?

Jan*_*nis 5

如果您使用ksh(或启用bash扩展通配符,或启用zshksh 通配符),您可以仅使用文件通配符模式来实现所需的功能:

ls -d -- !(*bak)
Run Code Online (Sandbox Code Playgroud)

使用grep, 要获得一个简单的解决方案,只需使用否定-v

ls | grep -v 'bak$'
Run Code Online (Sandbox Code Playgroud)