50

java regex pattern/match/group のように sed を使用して正規表現一致グループを実行できる方法はありますか?

次のような文字列がある場合

test-artifact-201251-balbal-0.1-SNAPSHOT.jar

次のような結果を得るためにsedを使用するにはどうすればよいですか。

test-artifact-0.1-SNASHOT.jar

sed を使用すると、Java 正規表現のようなことを行うことができるのではないかと思います。次のようなパターンを定義します。

([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)([.]*SNAPSHOT.jar)

次に、次のような配列として結果を取得できます。

test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
4

4 に答える 4

73

式をグループ化するには、括弧をエスケープする必要があります。

\([a-z]*-[a-z]*-\)\([0-9]*-\)\([a-z]*-\)\([.]*SNAPSHOT.jar\)

そして、、、などでそれらを使用し\1ます\2


編集SNAPSHOT:また、その直前に[.]一致しないことに注意してください。括弧内.はリテラルです。そのはず[0-9.-]*

于 2012-07-25T13:46:09.250 に答える
21

これがビレイとトールの意味です。

sed -r "s/([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)(.*)/\1\n\2\n\3\n\4/"

出力:

test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
于 2012-07-25T13:59:44.143 に答える
7

実際、これらの通常の文字列の場合、awk を使用するとグループ化を回避できます。:)

必要なパーツ インデックス番号を指定するだけです。

awk 'BEGIN{FS=OFS="-"}{print $1,$2,$5,$6}' 

出力:

kent$  echo "test-artifact-201251-balbal-0.1-SNAPSHOT.jar"|awk 'BEGIN{FS="-";OFS="-"}{print $1,$2,$5,$6}'
test-artifact-0.1-SNAPSHOT.jar
于 2012-07-25T14:05:09.283 に答える
2

もっと簡単な方法を探しているなら、これがあなたの助けになるかもしれません! :)

echo "est-artifact-201251-balbal-0.1-SNAPSHOT.jar" | cut -d- -f1,2,5,6

"-" を区切りとして使用し、フィールド 1、2、5、6 を出力します。

注: これには、フィールドの正確な位置を知る必要があります。

于 2016-09-27T19:10:13.430 に答える