Macos 英国文学学士格雷普&引用;GNU的通配符替代方案

Macos 英国文学学士格雷普&引用;GNU的通配符替代方案,macos,ubuntu,grep,Macos,Ubuntu,Grep,我有一个grep命令,可以在我的Mac上使用BSD grep 2.5.1-FreeBSD来搜索一个很长的单行bash变量: echo$MY_VAR|grep-Eo s3.+?模型 在使用GNU grep 2.25的Ubuntu上,?通配符似乎不起作用。它不会在第一次出现“model”时停止 有人能告诉我如何在Ubuntu中获得相同的匹配吗?打开以更改模式或安装其他/更新的grep 我不打算列出我迄今为止尝试过的一百万种模式,但我已经为此奋斗了一段时间 编辑:由于“模型”后面有一个“,”符号,因此

我有一个grep命令,可以在我的Mac上使用BSD grep 2.5.1-FreeBSD来搜索一个很长的单行bash变量:

echo$MY_VAR|grep-Eo s3.+?模型

在使用GNU grep 2.25的Ubuntu上,
通配符似乎不起作用。它不会在第一次出现“model”时停止

有人能告诉我如何在Ubuntu中获得相同的匹配吗?打开以更改模式或安装其他/更新的grep

我不打算列出我迄今为止尝试过的一百万种模式,但我已经为此奋斗了一段时间

编辑:由于“模型”后面有一个“,”符号,因此以下内容似乎有效,但看起来很难看:

egrep-o's3.*模型“| grep-o”^[^,]*'


有更好的方法吗?

您可以将PCRE正则表达式选项
p
与GNU
grep
一起使用,它还允许使用非贪婪量词:

echo $MY_VAR | grep -Po s3.+?model
                     ^
见:


借鉴Wiktor的例子,并考虑到您的注释和与逗号相关的代码,这似乎是您对任何具有ERE的
-E
的grep想要的:

$ MY_VAR='s3://model/,s3://another/model'
$ echo "$MY_VAR" | grep -Eo 's3[^,]+model'
s3://model
s3://another/model

谢谢,是的,不过我没有任何perl或ruby的经验,主要是python/C程序员。有可能在ubuntu上安装BSD grep吗?试试grep-Po s3.+?model@WiktorStribiżew成功了,谢谢@埃德蒙顿不知道。。使用macOS Mojave 10.14.2(18C54)的2017 MBP和它附带的默认grep,显然是BSD grep 2.5.1-FreeBSD。
$ MY_VAR='s3://model/,s3://another/model'
$ echo "$MY_VAR" | grep -Eo 's3[^,]+model'
s3://model
s3://another/model