我米使用遥控器通过ssh在服务器上运行的脚本。 在脚本中,我使用这条线从下:
ls | grep -oP "\d{4} -\d{2}-\d{2}"
在我的本地机器上运行Ubuntu脚本做工精细。 但是,当我尝试远程运行它,我得到这个
grep: invalid option -- 'P'
BusyBox v1.24.1 multi-call binary.
Usage: grep [-HhnlLoqvsriwFE] [-m N] [-A/B/C N] PATTERN/-e PATTERN/...-f file [FILE]...
我想的第一件事是一个别名问题,我想
type grep
输出是:grep is /bin/grep
我觉得这是好的。
我担心的是BusyBox的(我不知道它是什么),但我认为这可能是问题吗?
分析解答
您可以使用[0-9]
/ [[:digit:]]
代替\d
与POSIX BRE(没办法),或ERE(-E
选项):
grep -o "[0-9]\{4\} -[0-9]\{2\}-[0-9]\{2\}"
grep -oE "[0-9]{4} -[0-9]{2}-[0-9]{2}"
注意,在第一个命令,你需要躲避括号,因为转义{
和}
在POSIX BRE正则表达式匹配字面括号符号。当逃脱,他们平均范围(间隔,限制)量词。而在第二个命令,POSIX ERE与-E
启用,并且行为reverse:当括号逃脱他们是文字字符,否则它们的量词。