[英]Regex for Linux file permissions (numeric notation)
我不能为我的生活找到适当的正则表达式。
我正在寻找的是匹配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
更改为709
,则条件为真。 我也试过[0|1|2|3|4|5|7{3}]
和[(0|1|2|3|4|5|7{3})]
但这些都不起作用同样。
我正在使用正则表达式错误,还是我错过了必须处理grep
东西?
最适合您的最简单,最明显的正则表达式是:
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}'
[
]
定义一个范围,其中的所有字符都在允许的集合中。 \\
。 ^
作为正则表达式中的第一个字符,如果你想匹配到行的末尾你需要一个$
正则表达式结束。 仅供参考,您可以在Bash中使用shell模式
if [[ $strtotest == [0-7][0-7][0-7] ]]; then
echo "Found it"
fi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.