我知道有数百个类似的帖子,我已经尝试了很多东西,但无法得到它。我想从开始-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/

10-08 20:31