我米使用遥控器通过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:当括号逃脱他们是文字字符,否则它们的量词。