次の内容を含むファイルがあります。
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 (またはzsh
ksh エミュレーションモード) を使用して次のことができます。
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
\K
A:B:C:D
tr
:
$IFS
$ printf '%s\n' "${filetypes[0]}"
A
$ printf '%s\n' "${filetypes[3]}"
D