expr comando bash retornando 0 na avaliação da substring

0

O que estou tentando fazer é ler uma linha de um arquivo, armazená-la em uma linha $ variável e extrair todas as instâncias de (ou seja, colchetes angulares com apenas letras maiúsculas entre elas). O que estou tentando é:

while read line
do
#some other commands
FOUND='expr $line : \<[A-Z]*\>'
echo FOUND is:$FOUND
#more commands

Quando executo o script, eu o alimento:

<hello><HELLO>

saída:

FOUND is:0

Eu também tentei variações em cotações em torno do bit regex. isto é     %código% ,     %código% e      "\<[A-Z]*\>" Onde o último desses retorna nulo.

Eu verifiquei a página do manual, ele deve retornar 0 se zero caracteres forem correspondidos ou se a correspondência falhar. Eu sinto que é algo pequeno que estou negligenciando, mas depois de uma hora de pesquisa, eu ainda não consigo entender.

Qualquer ajuda é apreciada

    
por Kyle Cochran 13.07.2015 / 17:12

1 resposta

0

Verifique a página expr man: as expressões regulares estão implicitamente ancoradas , portanto, se sua linha $ não começar com uma palavra maiúscula entre colchetes, a expr ganhou encontre-o

line="<hello><HELLO>"
expr "$line" : '.*<[[:upper:]]*>'       # => 14
expr "$line" : '.*\(<[[:upper:]]*>\)'   # => <HELLO>

ref: link

Observe que expr não é um comando bash, é um programa separado. Se você quiser fazer isso no bash:

if [[ "$line" =~ "<"[[:upper:]]*">" ]]; then
    echo "found it"
    echo "${BASH_REMATCH[0]}"
fi

Além disso, citação suas variáveis

    
por 13.07.2015 / 19:09

Tags