Regex Linux文件权限的正则表达式(数字符号)

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的任何字符,而不考虑任何其他字符。例如,如果

我一辈子都找不出合适的正则表达式

我要找的是一个正则表达式来匹配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
的任何字符,而不考虑任何其他字符。例如,如果将
strottest
更改为
709
,则条件为true。我也试过
[0 | 1 | 2 | 3 | 4 | 5 | 7{3}]
[(0 | 1 | 2 | 3 | 4 | 5 | 7{3})]
,但这些都不起作用

我使用的正则表达式是错误的,还是缺少了一些必须处理的
grep

  • 您的正则表达式非常不完整:
    [
    ]
    定义一个范围,其中的所有字符都在允许的集合中
  • grep有一些额外的报价规则,可能需要额外的
    \
  • 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中需要的东西,用于解决正则表达式的问题和消除
    $?
    的显式比较。