在Ubuntu

时间:2016-09-18 21:40:01

标签: regex linux ubuntu grep

我有一个任务,我必须找到不同的文件,条件我认为需要正则表达式。

例如:

查找以3个小写字母开头且最后一个字母不是' i'的文件。我正在寻找找到这些文件的最佳方法。

我能做到

ls [a-z][a-z][a-z]*[azertyuopqsdfghjklmwxcvbn]

但是,这看起来有点像。 有什么想法吗?

2 个答案:

答案 0 :(得分:7)

$ ls
abci  ASds  dferasfds  dsfa998  ilkj323  retk232i

$ find -regextype egrep -regex '.*/[a-z]{3}.*[^i]$'
./dferasfds
./dsfa998
./ilkj323
  • .*/需要匹配文件路径的开头部分
  • [a-z]{3}三个小写字母
  • .*任何其他角色
  • [^i]$不以i
  • 结尾

但是,如果没有正则表达式,这种特殊情况似乎是可能的:

$ find -name '[a-z][a-z][a-z]*[!i]'
./dferasfds
./dsfa998
./ilkj323

答案 1 :(得分:3)

这些是整体,而不是正则表达式。你不需要正则表达式。

release()

第二种模式涵盖三个字符长的文件名;根据您的要求,不清楚是否应包括这些内容。 (如果不存在匹配的文件,shell将发出警告消息,但这是无害的。)如果没有,只需使用第一个模式。

(我使用printf '%s\n' [a-z][a-z][a-z]*[!i] [a-z][a-z][a-hj-z] 主要是为了说明shell在这里做了实际工作,并且printf不需要扩展glob模式。)

如果你真的需要正则表达式,ls是你的朋友。默认情况下,find -regex 'pattern'将遍历子目录;您可以使用find来避免这种情况。

也许还可以看看Bash的extended globbing中间选项。