Correspondência de expressões regulares de Bash simples que faltam char (OS X)

3

Eu estou combinando uma expressão regular muito simples no bash no OS X 10.11:

$ msg='[4]  the message'
$  [[ $msg =~ (.+)\t(.+) ]]
$ echo ${BASH_REMATCH[1]}
[4]
$ echo ${BASH_REMATCH[2]}
he message

Entre o ']' e o 't' de $msg é um caractere de tabulação. Não há nenhuma guia em ${BASH_REMATCH[1]} ou ${BASH_REMATCH[2]} . Para onde foi o 't' ?

    
por Mitchell Model 20.03.2017 / 18:30

1 resposta

4

O 't' está entre as duas sub-expressões regulares: \t , que não é interpretado como uma tabulação, mas como t . Uma tabulação seria $'\t' .

Tente isso:

$ msg=$'[4]\tthe message'
$ [[ "$msg" =~ (.+)$'\t'(.+) ]]
$ echo ${BASH_REMATCH[1]}
[4]
$ echo ${BASH_REMATCH[2]}
the message
    
por 20.03.2017 / 18:36