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*