Regex 在bash中,正则表达式在冒号后提取字符串
在下面的示例中,我需要提取Regex 在bash中,正则表达式在冒号后提取字符串,regex,bash,Regex,Bash,在下面的示例中,我需要提取:后面的字符串: 包:project.abc.def 因此,我将在那里获得project.abc.def 我正在bash中尝试这一点,我相信我有一个正则表达式可以工作:([^:]*)$ 在我的bash脚本中,我将package:project.abc.def作为名为apk的变量。现在,我如何将正则表达式中的子字符串赋给同一个变量 其中,package:project.abc.def的结果将位于apk变量中。和package:project.abc.def最初在apk变量
:
后面的字符串:
包:project.abc.def
因此,我将在那里获得project.abc.def
我正在bash中尝试这一点,我相信我有一个正则表达式可以工作:([^:]*)$
在我的bash脚本中,我将package:project.abc.def
作为名为apk
的变量。现在,我如何将正则表达式中的子字符串赋给同一个变量
其中,package:project.abc.def
的结果将位于apk
变量中。和package:project.abc.def
最初在apk
变量中
谢谢 这里不需要正则表达式,只需简单的前缀替换:
$ 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)
正则表达式中的捕获组可以在
BASH\u REMATCH
数组中找到
[[ $str =~ :([^:]*)$ ]]
# 0 is the substring that matches the entire regex
# n > 1: the nth parenthesized group
apk=${BASH_REMATCH[1]}
“*:”匹配之前的所有内容,包括“:”,然后将其从字符串中删除。它工作得很好,但如果您能对
#
东西添加一些解释,那就太好了。如果我没有错的话,这闻起来像是自动卸载或禁用android软件包
$ string="package:project.abc.def"
$ apk=$(echo $string | sed 's/.*\://')