【发布时间】:2021-11-26 18:50:51
【问题描述】:
我一直试图在 bash 中提取部分字符串。我在 Mac 上使用它。
输入字符串的模式:
- 一些随机词后跟
/。这是可选的。 - 关键字(
def、foo和bar)后跟连字符(-)后跟数字。这可以是 2-6 位数字 - 这些数字后面又是连字符和几个连字符分隔的单词。
示例输入和输出:
abc/def-1234-random-words // def-1234
bla/foo-12-random-words // foo-12
bar-12345-random-words // bar-12345
所以我尝试使用以下命令来获取它,但由于某种奇怪的原因,它返回了整个字符串。
extractedValue=`getInputString | sed -e 's/.*\(\(def\|bar\|foo\)-[^-]*\).*/\1/g'`
// and
extractedValue=`getInputString | sed -e 's/.*\(\(def\|bar\|foo\)-\d{2,6}\).*/\1/g'`
我还尝试使用I 标志使其不区分大小写,但它给我抛出了错误:
:替代命令中的错误标志:'I'
以下是我尝试过的参考:
【问题讨论】:
-
sed不支持\d用于数字,你可以使用[0-9] -
@Barmar 我注意到
\d周围有一些奇怪的行为。因此我搬到了[^-]*。它曾经匹配它,但总是返回整个字符串。但我会阅读更多关于它的内容