Unix正则表达式

时间:2017-07-13 09:32:00

标签: regex unix

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

  

找到“/ home / user / somePath /” - maxdepth 1! -regex   “/ home / user / somePath / someUnwantedPath”! -regex   “/ home / user中/ somePath / someMoreUnwantedPath”

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

2 个答案:

答案 0 :(得分:1)

我想你可以通过轮换来做到这一点。

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

find" / home / user / somePath /" -maxdepth 1! -regex" / home / user / somePath /(someUnwantedPath | someMoreUnwantedPath)"

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

修改

我是" Windows dude",所以我 熟悉Unix,但我想在BUW上试用它你必须逃避正则表达式元字符。所以我想正确的答案应该是

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

find" / home / user / somePath /" -maxdepth 1! -regex" / home / user / somePath / \(someUnwantedPath \ | someMoreUnwantedPath \)/.*"

答案 1 :(得分:0)

您可以使用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