正则表达式在bash中冒号后提取字符串

时间:2012-09-24 16:27:13

标签: regex bash

我需要在以下示例中的:之后提取字符串:

package:project.abc.def

结果我得到project.abc.def

我在bash中尝试这个,我相信我有一个正常的表达式:([^:]*)$

在我的bash脚本中,我将package:project.abc.def作为名为apk的变量。现在我如何为正则表达式找到的子串分配相同的变量?

package:project.abc.def的结果位于apk变量中。 package:project.abc.def最初位于apk变量?

谢谢!

3 个答案:

答案 0 :(得分:7)

这里不需要正则表达式,只需要简单的前缀替换:

$ apk="package:project.abc.def"
$ apk=${apk##package:}
project.abc.def

##语法是bash参数扩展之一。而不是#,%可用于修剪结束。有关详细信息,请参阅bash手册页的this section

一些替代方案:

$ apk=$(echo $apk | awk -F'package:' '{print $2}')
$ apk=$(echo $apk | sed 's/^package://')
$ apk=$(echo $apk | cut -d':' -f2)

答案 1 :(得分:2)

$ string="package:project.abc.def"
$ apk=$(echo $string | sed 's/.*\://')

“。*:”匹配之前的所有内容,包括':',然后将其从字符串中删除。

答案 2 :(得分:1)

可以在BASH_REMATCH数组中找到正则表达式中的捕获组。

[[ $str =~ :([^:]*)$ ]]
# 0 is the substring that matches the entire regex
# n > 1: the nth parenthesized group
apk=${BASH_REMATCH[1]}
相关问题