2016-10-22 5 views
0

文字列まで一致したい。だから私はそれがBashパラメータの展開 - 正規表現を含むがこれに限定されない

20-30-seirotS lleT eW yhW - yrotS ruoY lleT 


に減少させることにしたい

seirots-llet-ew-yhw-20-30-seirotS lleT eW yhW - yrotS ruoY lleT 

のようなテキストでだから、私はbashの変数に取り込む逆転した文字列のセットを持っているとし、変数を展開したいです

入力:

seirots-llet-ew-yhw-20-30-seirotS lleT eW yhW - yrotS ruoY lleT 
spets-ruoy-ecarter-30-30-spetS ruoY ecarteR - yrotS ruoY lleT 
cra-yrots-40-30-crA yrotS ruoY - yrotS ruoY lleT 
skcabhsalf-etaerc-50-30-skcabhsalF gnitaerC - yrotS ruoY lleT 
noitnetta-60-30-noitnettA gnipeeK dna gnitteG - yrotS ruoY lleT 
以下、このような何かを達成するための正規表現10

出力:

20-30-seirotS lleT eW yhW - yrotS ruoY lleT 
30-30-spetS ruoY ecarteR - yrotS ruoY lleT 
40-30-crA yrotS ruoY - yrotS ruoY lleT 
50-30-skcabhsalF gnitaerC - yrotS ruoY lleT 
60-30-noitnettA gnipeeK dna gnitteG - yrotS ruoY lleT 


次のように私のbashのコードは次のとおりです。

value="${reversed##*[a-z]-[0-9]}" 

をしかし、結果は私が望むものないです:

0-30-seirotS lleT eW yhW - yrotS ruoY lleT 
0-30-spetS ruoY ecarteR - yrotS ruoY lleT 
0-30-crA yrotS ruoY - yrotS ruoY lleT 
0-30-skcabhsalF gnitaerC - yrotS ruoY lleT 
0-30-noitnettA gnipeeK dna gnitteG - yrotS ruoY lleT 

お知らせどのように最初の数字は省略されています。

$ s='seirots-llet-ew-yhw-20-30-seirotS lleT eW yhW - yrotS ruoY lleT' 
$ echo "${s%%[0-9]*}" 
seirots-llet-ew-yhw- 

したがって、上記の場合、20-30-seirotS lleT eW yhW - yrotS ruoY lleTを除去するためにマッチした文字列を得られることseirots-llet-ew-yhw-である:

+1

あなたは_at all_のようなものを求めているわけではありません。そして、画像ではなくテキストスニペットを投稿してください。あなたはそれを知るべきです。 –

+1

これはあなたが欲しいものですか? 's = 'seirots-llet-ew-yhw-20-30'; echo "$ {s %% [0-9] *}" ' – Sundeep

+0

@ Jean-FrançoisFabreテキストを追加しました – atefth

答えて

1

は、最初に一致した数字の後にすべてを削除します。 extglobシェルオプションが利用可能な場合、結果はその後s変数

$ echo "${s#${s%%[0-9]*}}" 
20-30-seirotS lleT eW yhW - yrotS ruoY lleT 


の先頭から削除された文字列として使用することができます - 参照pattern matching manual

$ echo "${s##+([!0-9])}" 
20-30-seirotS lleT eW yhW - yrotS ruoY lleT 

+([!0-9])は、1つ以上の非数字を意味し、文字

正規表現で一致:

$ [[ $s =~ [0-9].* ]] && echo ${BASH_REMATCH[0]} 
20-30-seirotS lleT eW yhW - yrotS ruoY lleT 
関連する問題