2016-09-30 9 views
1

+はを除き、+が機能していないので、16972 1684 173を印刷する必要があります。我々は数字のカンマで区切られたペアの空白で区切られた配列であるとnumbersのフォーマットに依存することができますと仮定bashで数字を置き換えて検索

#!/bin/bash 
numbers="16972,4 1684,15556 173,2" 
echo $numbers 
echo ${numbers//,[[:digit:]]+/} 

答えて

2

あなたはextglobシェルオプションを有効にした場合、パターンの1回以上の繰り返しに一致することができます。

$ shopt -s extglob 
$ echo "${numbers//,+([0-9])/}" 
16972 1684 173 

はBashのマニュアルのPattern Matchingを参照してください。

+0

良い答え。 @krish、bashのパラメータ展開のトリックは正規表現を使わず、シェルのパターンを使っていることに注意してください。ユージーンの答えのリンクを読んでください。 –

4

は、単にその後、各要素に接尾辞の除去を適用し、配列に文字列を分割することができます。

$ numbers="16972,4 1684,15556 173,2" 
$ read -a arr <<< "$numbers" 
$ echo "${arr[@]%,*}" 
16972 1684 173 
+0

なぜ' ARR =($番号)を使用することができますか? – safsaf32

+2

この場合、一般的には、パス名の拡張を引き起こす可能性のある '*'のような文字を含む '$ numbers'が心配です。 – chepner

1

あなたは `代わりsed

$ sed -r 's/,[0-9]+//g' <<< $numbers 
16972 1684 173 
関連する問題