シェルスクリプトで特定の文字列のイコールの後ろの文字列を取得


Solaris上でシェルスクリプト（bash）にて、CSV形式ファイルから取得した1行毎の文字列の中から、特定の文字列のイコールの後ろのカンマ前までの文字列を抜き取りたいのですが、正規表現の書き方が解りません。どうかご教授いただけますでしょうか。

（例）  
a=aaa,b=bbb,c=ccc,d=ddd,e=eee  
a=aaa,c=ccc,d=ddd,e=eee,f=fff  
b=bbb,c=ccc,d=ddd,e=eee,g=ggg  
：

上記の例で、"d="の後ろの”ddd"を取得したいです。  
"d="は必須項目なのですが、"a="や"b="は必須ではない為、  
データが無い場合もあり、"d="の出現順序は固定ではありません。




bash の built-in command だけを使うのであれば以下の様に、

[code]

    $ while IFS=, read -ra l
      do
        for((i=0;i<${#l[@]};i++))
        do
          [[ ${l[$i]} =~ ^d=.+ ]] && printf '%s\n' "${l[$i]#d=}"
        done
      done < data.csv
    
[/code]

GNU grep を使っても良いのであれば以下の様にもできます。

[code]

    $ grep -Po '((?<=,d=)|(?<=^d=))(.+?)(?=(,|$))' data.csv
    
[/code]

ただ、どちらとも d の値が無い場合(以下の様な行)は何も出力しません。

[code]

    a=aaa,b=bbb,c=ccc,d=,e=eee
    
[/code]

**追記**

Solaris + sed との事ですが、tr コマンドと組み合わせて以下の様にしてみると良いかもしれません。

[code]

    $ tr , '\n' < data.csv | sed -n 's/^d=//p'
    
[/code]

なお、手元に Solaris 環境がないため結果については未確認です。

