pt tratamento de exceção de caracteres com escape

1

Eu quero excluir qualquer coisa que siga um % até o final da linha. Usando

cat /tmp/foo.txt | sed 's/%.*$//'

funciona muito bem com uma exceção: desejo ignorar qualquer sinais de porcentagem de escape \% . Então, com o seguinte arquivo salvo como /tmp/foo.txt

abcd %123
xyz \%xyz
xyz \%xyz %123

a saída que eu quero é

abcd 
xyz \%xyz
xyz \%xyz

Qual é o tratamento adequado de exceções para fazer isso?

    
por Peter Grill 14.04.2015 / 17:11

1 resposta

1

Você precisa olhar para o personagem antes da porcentagem.

sed 's/\([^\]\)%.*//'

Se o caractere anterior não for uma barra invertida, mantenha esse caractere e remova o restante.

Esta resposta assume que o % não aparece no início da linha. Em caso afirmativo, precisamos verificar isso

sed 's/\(^\|[^\]\)%.*//'
    
por 14.04.2015 / 17:29