web-dev-qa-db-ja.com

sed-sedを使用して正規表現グループを実行する方法

とにかく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
37
Shengjie

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

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

そして、\1\2など.


[〜#〜] edit [〜#〜]SNAPSHOTの直前に注意してください[.]は一致しません。中括弧.はリテラルです。そのはず [0-9.-]*

59
Birei

ビレイとトールの意味は次のとおりです。

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
16
Steve

これらの通常の文字列の事実、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
6
Kent

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

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

「-」は区切り文字として使用され、フィールド1,2,5,6が印刷されます。

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

2
SAM80DEV