とにかくJava regex pattern/match/group?
私のような文字列がある場合
test-artifact-201251-balbal-0.1-SNAPSHOT.jar
次のような結果を得るためにsedを使用するにはどうすればよいですか?
test-artifact-0.1-SNASHOT.jar
Sedでは、Java regex、次のようなパターンを定義できます。
([a-z]*-[a-z]*-)([0-9]*-)([a-z]*-)([.]*SNAPSHOT.jar)
そして、次のような配列として結果を取得できます。
test-artifact-
201251-
balbal-
0.1-SNAPSHOT.jar
括弧をエスケープして式をグループ化する必要があります。
\([a-z]*-[a-z]*-\)\([0-9]*-\)\([a-z]*-\)\([.]*SNAPSHOT.jar\)
そして、\1
、\2
など.
[〜#〜] edit [〜#〜]:SNAPSHOT
の直前に注意してください[.]
は一致しません。中括弧.
はリテラルです。そのはず [0-9.-]*
ビレイとトールの意味は次のとおりです。
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
これらの通常の文字列の事実、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
もっと簡単な方法を探しているなら、これがあなたの助けになると思います! :)
echo "est-artifact-201251-balbal-0.1-SNAPSHOT.jar" | cut -d- -f1,2,5,6
「-」は区切り文字として使用され、フィールド1,2,5,6が印刷されます。
注:これには、フィールドの正確な位置を知る必要があります。