在服务器上 运行 远程的 bash 脚本中使用 grep 时出现问题

Problem using grep inside a bash script that run remote on a server

我正在使用 运行 通过 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 正则表达式中的文字大括号符号。转义时,它们表示 range (interval, limiting) 量词。在第二个命令中,POSIX ERE 通过 -E 启用,并且行为是相反的:当大括号被转义时,它们是文字字符,否则它们是量词。