grep 一致を配列として保存

grep 一致を配列として保存

次の内容を含むファイルがあります。

FILETYPE=A:B:C:D

Linuxでkshスクリプトの配列としてgrep検索AしてB保存するC方法は?D頑張った

FILETYPES=`grep "FILETYPE" ${CONF_FILE} | awk -F: '{print $NF}'`

しかし、これは最後のものだけを得る。

ベストアンサー1

GNU/Linux では、ksh93 または mksh (またはzshksh エミュレーションモード) を使用して次のことができます。

set -o noglob
filetypes=( $(grep -Po 'FILETYPE=\K.*' < "$CONF_FILE" | tr ':' ' ') )

(デフォルト値と仮定$IFS

またはもっと慣用的に言えば:

set -o noglob
IFS=:
filetypes=( $(grep -Po 'FILETYPE=\K.*' < "$CONF_FILE"))

配列名には小文字を使用していますが、これは一般に環境変数が大文字であるため安全です。コマンドの出力を配列として保存する方法は次のとおりです。

array=( $(command) )

globを無効にしてフィールド区切り文字を設定した後。

次に、コマンド自体grep(ここではGNUgrepまたはPerl準拠の正規表現サポートが有効になっていると仮定します())。これが意味するものを-P教えてくれます。\K「これまでの一致をすべて削除します。」。行の一致する部分だけを印刷するようにし、 と一緒に使用すると、その-o部分だけが印刷されます。最後に、デフォルト値の空白に置き換えます。grep\KA:B:C:Dtr:$IFS

$ printf '%s\n' "${filetypes[0]}"
A
$ printf '%s\n' "${filetypes[3]}" 
D

おすすめ記事