Eu tento analisar minha string de entrada em um script com awk e encontrei algumas limitações com vários caracteres especiais, como *** e +++ .
No entanto, com o mesmo script, com ::: ou --- como delimitadores, não tenho nenhum problema.
Meu script:
input=$1
delimiter=":::"
field2=$(echo "$input" | awk -F"$delimiter" '{print $2}')
field3=$(echo "$input" | awk -F"$delimiter" '{print $3}')
echo "field2=$field2"
echo "field3=$field3"
Saída com ::: como delimitador:
bash-3.2$ ./parse_options.sh ":::sub option::: Main option, still:bla:"
field2=sub option
field3= Main option, still:bla:
Agora, se eu tentar usar *** como um delimitador, mas tiver outros * isolados em minha string, aqui está o que recebo, infelizmente: o *bla* é contado como outro campo e não é o que eu quero:
bash-3.2$ ./parse_options.sh "***sub option*** Main option, still*bla*"
field2=sub option
field3= Main option, still
Como você pode ver, *bla* não aparece no terceiro campo, o delimitador definido em awk não é respeitado nesse caso.
E é a mesma coisa com +++ como um delimitador:
bash-3.2$ ./parse_options.sh "+++sub option+++ Main option, still+bla+"
field2=sub option
field3= Main option, still
Para mais esclarecimentos:
entrada = ***sub option*** Main option, still*bla*
Saída esperada =
field2=sub option
field3= Main option, still*bla*