Regex Linux文件权限的正则表达式(数字符号)
我一辈子都找不出合适的正则表达式 我要找的是一个正则表达式来匹配Linux文件权限的有效数字表示形式(例如,740表示全部读取无,777表示全部读取)。到目前为止,我已经尝试了以下方法:Regex Linux文件权限的正则表达式(数字符号),regex,linux,bash,grep,Regex,Linux,Bash,Grep,我一辈子都找不出合适的正则表达式 我要找的是一个正则表达式来匹配Linux文件权限的有效数字表示形式(例如,740表示全部读取无,777表示全部读取)。到目前为止,我已经尝试了以下方法: strtotest=740 echo "$strtotest" | grep -q "[(0|1|2|3|4|5|7){3}]" if [ $? -eq 0 ]; then echo "found it" fi 上面的问题是,正则表达式匹配其中包含1-5或7的任何字符,而不考虑任何其他字符。例如,如果
strtotest=740
echo "$strtotest" | grep -q "[(0|1|2|3|4|5|7){3}]"
if [ $? -eq 0 ]; then
echo "found it"
fi
上面的问题是,正则表达式匹配其中包含1-5
或7
的任何字符,而不考虑任何其他字符。例如,如果将strottest
更改为709
,则条件为true。我也试过[0 | 1 | 2 | 3 | 4 | 5 | 7{3}]
和[(0 | 1 | 2 | 3 | 4 | 5 | 7{3})]
,但这些都不起作用
我使用的正则表达式是错误的,还是缺少了一些必须处理的grep
[
]
定义一个范围,其中的所有字符都在允许的集合中\
^
作为正则表达式中的第一个字符,如果要匹配行尾,则需要在正则表达式的末尾添加一个$
最简单和最明显的regexp将为您提供:
grep -q '(0|1|2|3|4|5|7)(0|1|2|3|4|5|7)(0|1|2|3|4|5|7)'
以下是一个优化版本:
grep -Eq '(0|1|2|3|4|5|7){3}'
由于6也可以表示权限,我们可以进一步优化它:
grep -Eq '[0-7]{3}'
你想要的可能是
grep -Eq "[0-7]{3}"
编辑:
如果您使用它来查找具有特定权限的文件,您应该查看(
-perm
)或,仅供参考,您可以使用Bash中的shell模式来执行此操作
if [[ $strtotest == [0-7][0-7][0-7] ]]; then
echo "Found it"
fi
非常感谢。这很有效。我希望我能+代表一些人,但我想我需要在这个网站上更积极一点,这样做:你在回答中发布的P
grep-Eq“[(0 | 1 | 2 | 3 | 4 | 5 | 7)]{3}”
(及其较长的表亲)实际上是不正确的[]
定义了一个范围,因此您的正则表达式将匹配say|124; 9
,77)
等。更正了正则表达式,因为这是公认的答案,也是最有可能看到的答案。谢谢。我这样做是为了学习。我在bashshell中使用它,当执行并提供权限时,它会将其中所有文件和子目录的权限更改为给定的权限。哦,我失败了。我错误地认为括号是grep在regexps.+1中需要的东西,用于解决正则表达式的问题和消除$?
的显式比较。