\ + com sed não funciona

0

Estou usando o Bash e o \+ funciona com grep , mas não com sed .

Por exemplo, se eu fizer

echo "abbbbc"| sed -e s/ab\+c/def/

Eu obtenho este resultado: abbbbc

Eu tentei com ' ou com " em torno de s/ab\+c/def/ , eu obtenho o mesmo resultado.

mas se eu substituir \+ por * , obtenho: def

Eu tenho que alterar >Atab_TR4682|c0_g1_i1|m.14206 para Atab

Se eu fizer echo ">Atab_TR4682|c0_g1_i1|m.14206" | sed -e "s/>*\([[:alpha:]]\\*)_.\*//g"

Eu obtenho Atab_TR4682|c0_g1 provavelmente porque * também pode ser usado para 0 iteração, mas se eu substituir * por \+ , não funcionará ..

Alguém tem uma explicação?

    
por DavidB 24.03.2017 / 18:29

1 resposta

1

O GNU sed aceita um escape + , portanto, se seu sed for compatível com GNU, você pode fazer:

$ echo "abbbbc" | sed 's/ab\+c/def'
def
$ echo "abbbbc" | sed "s/ab\+c/def"
def
$ echo "abbbbc" | sed s/ab\+c/def
def

O comando sed especificado pelo POSIX (mais geralmente disponível) usa apenas POSIX BREs (expressões regulares básicas ) por padrão. Se o seu sed for compatível com POSIX, mas não compatível com GNU e você quiser que x+ aja como xx* , então você quer a opção -E :

$ echo "abbbbc" | sed -E 's/ab+c/def/'
def

Algumas implementações não-GNU de sed incluem -r como sinônimo de -E , para compatibilidade com versões mais antigas do GNU sed . A sintaxe -E é POSIX e o% GNU sed aceita ambas.

    
por 24.03.2017 / 18:35