2017-05-12 15 views
-1

に保存してください申し訳ありません、繰り返しましたが見つかりませんでした。私は次のシェル文字列を持っていますbashの文字列から数値を抽出し、再配列を配列

#!/bin/sh 
word_1="/dev/sda5 233371648 242774015 9402368 4,5G 82 Linux swap/Solaris" 

私はそれからすべての整数を抽出し、それを配列に保存する必要がありますか? 4,5Gを整数と同じ配列の中に入れることは可能ですか?そうでない場合は、整数だけを抽出するだけで問題ありません。

+0

もう一度 'POSIX'シェル' sh'またはBourneを使用しています 'bash'シェル – Inian

+1

何か試しました – 123

+0

私はubuntu 16.4を使用しています。 POSIXだと思います。/bin/shと/ bin/bashの両方を持っています。私は実際には非常に正確な違いを知らない。 – halim

答えて

0

この1つは私の作品:第二は、異なるライン上の各番号を書き出しながら

#!/bin/bash 
word="/dev/sda5 233371648 242774015 9402368 4,5G 82 Linux swap/Solaris" 
separated=$(echo ${word} | sed -e 's/ /\n/g') 
array=$(echo "${separated}" | sed -e '/^[0-9]*$/!d') 
echo ${array} 
echo "${array}" 

最初のエコーコマンドは、1行ですべての数字を書き出します。 sedのいくつかのバージョンは、改行文字 '\ n'をサポートしていないことに注意してください。たとえば、MacOSでは、同じ機能を得るためにgsedを代わりに使用する必要があります。

+0

4.5Gが配列内の数字としてキャッチされていなくても完全に機能しますが、私はintergerでうまくいきます。ありがとう! #!/ bin/bashから#!/ bin/shに変更すると、なぜエラーが出てスクリプトがうまくいかないのか分かりますか? – halim

+0

多分、あなたがこの投稿を見ているなら最高です:http://stackoverflow.com/questions/5725296/difference-between-sh-and-bash –

1

しかし、あなたはだけ整数をしたいが、K、M、G、などが可能ならば、試してみてください。

unset a; let i=0; declare -a a ; for b in $word_1 ; do [[ $b =~ ^-?[0-9,kMG]+$ ]] && a[i++]=$b ; done ; echo ${a[*]} 
+0

しかし、私はそれを完全に理解することはできませんが、私は配列として4,5Gを4.5Gでなく4.5Gにすることを好みました。多くのおかげで再び! – halim

関連する問題