Por que o meu regex não funciona usando o sed no script bash no Mac OSX?

1

Estou tentando capturar CBX-1234 da string CBX-1234--CBX-5678 ou CBX-12345--CBX-5678 . Estou usando um script bash no Mac OSX usando sed para executar a expressão regular.

string="CBX-1234--CBX-5678"
shortenedString=$(echo "$string" | sed "s/^([A-Za-z]+-[0-9]+)//")

Isso gera a seguinte mensagem de erro:

sed: 1: "s/^([A-Za-z]+-[0-9]+)//": not defined in the RE

Como posso capturar a substring? Estou aberto a sugestões usando sed ou outros meios no bash.

    
por zeckdude 17.02.2017 / 00:21

3 respostas

4

Você precisa adicionar -E à linha de comando sed para usar as expressões regulares estendidas:

sed -E 's/^([A-Za-z]+-[0-9]+)//'

Se o que você quer fazer é encurtar a string CBX-1234--CBX-5678 para CBX-1234 , você também precisa modificar a substituição para levar em conta toda a string:

sed -E 's/^([A-Za-z]+-[0-9]+).*$//'

Você pode alternativamente usar a expansão do parâmetro bash

shortenedString="${string%%--*}"

Isso removerá tudo de $string da primeira ocorrência de -- .

    
por 17.02.2017 / 00:30
1

Você pode usar echo "$string" | cut -d "-" -f 1,2 .

    
por 17.02.2017 / 00:30
0

Eu sempre uso sed -r

$ echo "abhellocd" | sed -r "s/.*(hello).*//g"
hello

A partir da página man do sed:

   -r, --regexp-extended
          use extended regular expressions in the script.

A opção -E não está listada por mim. Embora também funcione.

    
por 17.02.2017 / 07:51