7

我需要:在下面的示例中提取字符串:

package:project.abc.def

结果我会在哪里project.abc.def

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

在我的 bash 脚本中,我有package:project.abc.def一个名为apk. 现在我如何为使用正则表达式找到的子字符串分配相同的变量?

结果package:project.abc.def将在apk变量中。并且package:project.abc.def最初在apk变量中?

谢谢!

4

3 回答 3

12

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

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

## 语法是 bash 的参数扩展之一。可以使用 % 代替 # 来修剪结尾。有关详细信息,请参阅bash 手册页的这一部分。

一些替代方案:

$ apk=$(echo $apk | awk -F'package:' '{print $2}')
$ apk=$(echo $apk | sed 's/^package://')
$ apk=$(echo $apk | cut -d':' -f2)
于 2012-09-24T16:33:09.493 回答
4
$ string="package:project.abc.def"
$ apk=$(echo $string | sed 's/.*\://')

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

于 2012-09-24T18:25:00.570 回答
2

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

[[ $str =~ :([^:]*)$ ]]
# 0 is the substring that matches the entire regex
# n > 1: the nth parenthesized group
apk=${BASH_REMATCH[1]}
于 2012-09-24T16:43:18.010 回答