我需要在以下示例中的:
之后提取字符串:
package:project.abc.def
结果我得到project.abc.def
。
我在bash中尝试这个,我相信我有一个正常的表达式:([^:]*)$
。
在我的bash脚本中,我将package:project.abc.def
作为名为apk
的变量。现在我如何为正则表达式找到的子串分配相同的变量?
package:project.abc.def
的结果位于apk
变量中。 package:project.abc.def
最初位于apk
变量?
谢谢!
答案 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]}