我知道有数百个类似的帖子,我已经尝试了很多东西,但无法得到它。我想从开始-D
的字符串中提取一个单词。例子:
This is foo -Dbar,barOne the end
应该打印
-Dbar,barOne
以下是我所拥有的:
sed -n 's/.*\-D\(.*[\s\|$]\)/\1/p'
这不是唯一的正则表达式,我已经尝试了很多变化,但其中一个或另一个不起作用。例如,一旦我能够得到输出,如果
-D
是最后一个词,但没有工作,它是在中间,一旦它工作,如果它是在中间,没有如果它是在最后。我在这里做错什么了? 最佳答案
使用纯BASH:
s='This is foo -Dbar,barOne the end'
[[ "$s" =~ (-d[^[:space:]]+) ]]; echo "${BASH_REMATCH[1]}"
-Dbar,barOne
说明:
-d
匹配文本-d
[^[:space:]
-匹配除空间以外的任何内容[^[:space:]]+
匹配1个或多个非空间(相当于\S+
)(-d[^[:space:]]+)
捕获组1中捕获整个匹配&&
仅当上一个命令成功时才执行下一个命令echo "${BASH_REMATCH[1]}"
打印捕获组1关于regex - 使用bash从行中或行尾提取单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27534122/