繁体   English   中英

适用于Linux文件权限的正则表达式(数字表示法)

[英]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-57的任何内容,而不管其他任何字符。 例如,如果将strtotest更改为709 ,则条件为真。 我也试过[0|1|2|3|4|5|7{3}][(0|1|2|3|4|5|7{3})]但这些都不起作用同样。

我正在使用正则表达式错误,还是我错过了必须处理grep东西?

你想要的可能是什么

grep -Eq "[0-7]{3}"

编辑:如果您使用它来查找具有特定权限的文件,您应该查看find-perm )或stat

最适合您的最简单,最明显的正则表达式是:

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}'
  1. 你的正则表达式非常破碎: [ ]定义一个范围,其中的所有字符都在允许的集合中。
  2. grep有一些额外的引用规则,可能需要额外的\\
  3. grep在每一行中搜索你的正则表达式 - 如果你只想在行的开头匹配你需要^作为正则表达式中的第一个字符,如果你想匹配到行的末尾你需要一个$正则表达式结束。

仅供参考,您可以在Bash中使用shell模式

if [[ $strtotest == [0-7][0-7][0-7] ]]; then
    echo "Found it"
fi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM