Remover caracteres de escape usando sed

3

Eu tenho entrada proveniente de pipe que contém caracteres de escape especiais. Por exemplo, o stream é assim:

printf "foo.bar3[00m" > file
cat file

Como posso remover o .bar3[00m ? Eu tentei o seguinte, mas isso não funciona:

cat file | sed 's/\.bar3[00m//'
    
por Martin Vegter 07.12.2014 / 20:48

2 respostas

3

Se você quiser na saída apenas foo , então

printf '%s' 'foo.bar3[00m' | sed 's/\.bar\033\[00m//'

Observe que \ e [ precisam escapar de outro \ . Além disso, adicionei '%s' a printf para imprimir os caracteres de entrada como string literal, caso contrário, 3[ poderia ser interpretado como código de escape seguido por cor ANSI.

Após a edição da pergunta: Se o seu arquivo contiver caracteres de controle como

printf "foo.bar3[00m" > file

então, para substituí-lo, escreva o seguinte:

sed 's/\.bar Ctrl-v ESC \[00m//'

Depois de apertar Ctrl-v ESC você deve ver ^[ na tela, mas não o literal ^ e [ (dois caracteres), mas um caractere de controle único.

    
por 07.12.2014 / 20:53
1

Você precisa escapar dos caracteres [ e \ com uma barra invertida:

printf '%s' "foo.bar3[00m" | sed 's/\.bar\033\[00m//'

Como alternativa, se você quiser remover tudo após o caractere de ponto na string:

printf "foo.bar3[00m" | sed 's/\..*//'
    
por 07.12.2014 / 20:53