Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在bash中,正则表达式在冒号后提取字符串_Regex_Bash - Fatal编程技术网

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/.*\://')