我有一个我们在Ubuntu ( Linux )上使用的脚本,我想将它转换为Ubuntu (Linux)和MacOS X。在Linux上的grep不同于FreeBSD上的grep (即MacOS X);grep on MacOS X不支持-P选项。不幸的是,在这两个平台上使用-E选项并不能给出相同的结果。考虑在Linux上工作的以下代码:
wip_scenarios=$(grep -oP "^\d+ scenarios?" log/report.log | grep -oP "\d+")
echo "\n"
echo $wip_scenarios这将在Linux上返回一个0。将所有的-P替换为-E使它在MacOS X上工作,但是在Linux上,它只返回一个null,当我使用这样的条件词时,这对我的脚本的其余部分没有帮助:
if [ $wip_scenarios != 0 ];then一种解决方案是在前面放置一个旗子,并根据平台使用适当的选项集,但我希望有一个跨平台的解决方案。有办法这样做吗?
发布于 2015-06-02 00:01:13
这里给出的正则表达式很简单:将\d更改为[[:digit:]]。
因此:
wip_scenarios=$(grep -Eo '^[[:digit:]]+ scenarios[?]' <report.log | grep -Eo '[[:digit:]]+')如果您的脚本以#!/bin/bash开头(因此只能使用bash运行),我还会考虑跳过非标准扩展grep -o上的依赖项,而依赖bash本身来分离您所关心的数字:
# This works with any POSIX-compliant grep, but requires that the shell be bash
wip_scenarios_re='([[:digit:]]+) scenarios[?]'
wip_scenarios_line=$(grep -E '^[[:digit:]]+ scenarios[?]' <report.log)
[[ $wip_scenarios_line =~ $wip_scenarios_re ]] && {
wip_scenarios=${BASH_REMATCH[1]}
}https://stackoverflow.com/questions/30585212
复制相似问题