sed - substituição de expressão regular simples não substitui [duplicado]

1

Estou tentando usar sed para remover qualquer prefixo de subdomínio de uma lista de nomes de host, mas não substitui nada quando uso uma expressão regular. Aqui está o exemplo simplificado que não está funcionando:

echo "subdomainxyz.example.com" | sed 's/[a-z]+\.example\.com//'

Quando codifico um subdomínio em particular, ele funciona bem:

echo "subdomainxyz.example.com" | sed 's/subdomainxyz\.example.com/example.com/'
    
por sa289 11.10.2015 / 01:25

1 resposta

1

Eu descobri a resposta antes de enviar a pergunta, mas como eu já havia digitado, pensei em postar, caso seja útil para alguém.

A principal coisa que foi necessária foi adicionar o sinal -r (pode ser -E em algumas versões) para informar sed para suportar expressões regulares estendidas, o que é necessário para usar a sintaxe de classe / intervalo de caractere e mais operador [a-z]+ . Isto é exatamente como você tem a ver com grep (por algum motivo eu achei que sed era padronizado para expressões regulares estendidas, mas isso estava incorreto).

Aqui está um exemplo de trabalho:

echo "subdomainxyz.example.com" | sed -r 's/[a-z]+\.example\.com/example.com/'

EDIT (credit steeldriver):

O simples escape do sinal de mais funciona sem que -r seja necessário. Exemplo:

echo "subdomainxyz.example.com" | sed 's/[a-z]\+\.example\.com/example.com/'
    
por 11.10.2015 / 01:25