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 のパラメーター展開の 1 つです。# の代わりに % を使用して末尾をトリミングできます。詳細については、bash man ページのこのセクションを参照してください。

いくつかの代替案:

$ 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 に答える