Filter VCF for "CAF=[0.9,0.1]"
Printing a bracketed list of numerical values is not typical for VCF—I'd guess it's not strictly allowed. A list should be printed only with the commas to separate values. Perhaps the solution is as simple as removing the square brackets.

cat input.vcf | perl -ne 's/CAF=\[([^\]]+)\]/CAF=$1/; print' &gt; fixed.vcf


Replace cat with gunzip -c if your VCF file is gzip-compressed.

The Perl regular expression is


looking for the string CAF=[...]
grabbing the characters in ...
replacing the entire match with CAF=...


Here's a detailed breakdown of the Perl regular expression.


s/.../.../; — substitution syntax; replace the contents of the left block with the contents of the right block
[^\]]+ — one or more non-] characters; this is the trickiest bit; see this tutorial for more info on the [] syntax for character classes and the special ^ symbol for character class negation
(...) — the parentheses capture the matched pattern into the $1 variable
CAF=$1 — replaces everything matched in the first block with CAF= followed by the captured characters