grep 結果にスペースと特殊文字が含まれています。

grep 結果にスペースと特殊文字が含まれています。

lshwから結果を取得し、bash配列に追加して新しい文字列を作成しようとしています。使っています

lshw -class disk |egrep -A 7 .'-d' |grep 'product' |cut -b 17-

出力は次のとおりです

Samsung SSD 850
Samsung SSD 840
ST8000AS0002-1NA
ST8000AS0002-1NA
Samsung SSD 870
Samsung SSD 870
ST8000VN0022-2EL
Flash Drive FIT
Flash Drive FIT
ST8000AS0002-1NA
ST8000VN0022-2EL
Samsung SSD 870
Samsung SSD 870
ST8000VN004-2M21

この出力をbash配列に追加しようとしましたが、スペースで区切られた単語の各行が配列の要素になります。このコマンドの結果も表示できます。

for w in $(lshw -class disk |egrep -A 7 .'-d' |grep 'product' |cut -b 17-); do printf "$w \n" ;done

出力

Samsung
SSD
850
Samsung
SSD
840
ST8000AS0002-1NA
ST8000AS0002-1NA
Samsung
SSD
870
Samsung
SSD
870
ST8000VN0022-2EL
Flash
Drive
FIT
Flash
Drive
FIT
ST8000AS0002-1NA
ST8000VN0022-2EL
Samsung
SSD
870
Samsung
SSD
870
ST8000VN004-2M21

スペースで区切られた行を文字列として保持するには?

ベストアンサー1

mapfileおそらく最も簡単です。

mapfile -t myarray < <(lshw -class disk |egrep -A 7 .'-d' |grep 'product' |cut -b 17-)

ただし、リテラル配列を使用せずに結果のみを繰り返す場合は、次のことができます。

lshw -class disk |egrep -A 7 .'-d' |grep 'product' |cut -b 17- | while read w ; do [something with w] ; done

おすすめ記事