Unix 正则表达式



我需要在unix find命令中使用unix正则表达式:

找到 "/home/user/somePath/" -maxdepth 1 ! -regex "/home/user/somePath/someUnwantedPath" !-正则表达式 "/home/user/somePath/someMoreUnwantedPath">

这有效,但我需要将正则表达式优化为一个正则表达式,因为不需要的路径不仅仅是几个。

我想你可以交替进行

/home/user/somePath/(someUnwantedPath|someMoreUnwantedPath)

找到 "/home/user/somePath/" -maxdepth 1 ! -regex "/home/user/somePath/(someUnwantedPath|someMoreUnwantedPath(">

只需在括号组末尾添加更多路径,以新|作为交替分隔符开始。 即|AnotherUnwantedPath.

编辑

我是一个"Windows花花公子",所以我对Unix不是熟悉,但我想在BUW上尝试一下,看来你必须转义正则表达式元字符。所以我想正确的答案应该是

/home/user/somePath/(someUnwantedPath|someMoreUnwantedPath)/.*

找到 "/home/user/somePath/" -maxdepth 1 ! -regex "/home/user/somePath/\(someUnwantedPath\|someMoreUnwantedPath\(/.*">

您可以使用grep -v -f而不是正则表达式来使其干净。备用 (|( 运算符在许多 unix 系统中不起作用。您的排除文件应列出要排除的所有文件(包括子目录,如果有的话(。

cat excl_files.txt
/home/user/somePath/someUnwantedPath1
/home/user/somePath/someUnwantedPath2
/home/user/somePath/someUnwantedPath3
..
/home/user/somePath/someUnwantedPathn
find "/home/user/somePath/" -maxdepth 1 |  grep -v -f excl_files.txt

最新更新