スポンサーリンク

コマンドの実行結果を配列に格納する

下記の形式で書くことにより、コマンドの実行結果をarrayに格納することができます。

array=($(コマンド))

下記に、grepの結果を配列に格納する方法を書いてみたいと思います。

サンプルコードと実行結果も貼っています。
よろしければご参考ください。

スポンサーリンク

grepで検索された行を配列に格納する方法

例えば、ファイルin.txtをgrepして"target"の文字列にマッチした行を、配列arrayに格納するためには下記のように書きます。

array=($(grep "target" in.txt))

サンプルコード

例えば、下記のようにin.txtがあったとします。

 $ cat in.txt 
line1
line2
line3target
line4wc
line5target
line6target

下記がサンプルコードになります。
ファイルin.txtをgrepして"target"の文字列にマッチした行を、配列arrayに格納しています。
その後、echoで配列の中身を表示しています。
 $ cat sample.sh 
#!/bin/sh

array=($(grep "target" in.txt))

echo ${array}
echo ${array[@]}
echo array1=${array[0]}
echo array2=${array[1]}
echo array3=${array[2]}

for i in ${array[@]}
do
	echo $i
done 

下記が実行結果となります。
 $ ./sample.sh 
line3target
line3target line5target line6target
array1=line3target
array2=line5target
array3=line6target
line3target
line5target
line6target

配列の参照方法

上記サンプルコードのechoの部分について補足説明です。
配列の先頭の値が出力されます。

echo ${array}

配列の全要素が出力されます。
echo ${array[@]}

下記のようにindexを指定して出力できます。
index=0の配列の要素が出力されます。
echo array1=${array[0]}

index=1の配列の要素が出力されます。
echo array2=${array[1]}

index=2の配列の要素が出力されます。
echo array3=${array[2]}

for文で配列の要素を順に取得して変数iに格納し、echoで出力しています。
for i in ${array[@]}
do
	echo $i
done 




その他:grepの-oオプションで検索にマッチした部分のみ配列に格納
grepに-oオプションを付けることで、検索にマッチした部分のみ配列に格納することもできます。

下記に-oオプションを付けたサンプルコードを書いています。
正規表現と組み合わせると便利に使うことができます。
参考:grepの-oオプションで検索にマッチした部分のみ出力

スポンサーリンク