Como remover os ^ [[1m ^ [[22m ^ [[4m ^ [[24m caracteres enquanto mantém a nova linha?] [duplicado]

0

ENTRADA:

[user@notebook test]$ cat a.txt

music
musicsheet
sheetmusic

[user@notebook test]$ cat a.txt | cat -vte -
$
^[[1mmusic^[[22m$
^[[1mmusicsheet^[[22m$
^[[1msheetmusic^[[22m$
^[[4m^[[24m$
[user@notebook test]$ 

NEEDED OUTPUT (depois de remover esses caracteres interessantes):

[user@notebook test]$ cat a.txt 
music
musicsheet
sheetmusic
[user@notebook test]$ cat a.txt | cat -vte -
music$
musicsheet$
sheetmusic$
[user@notebook test]$ 

Pergunta : Como posso remover os caracteres interessantes / desconhecidos:

^[[1m
^[[22m
^[[4m
^[[24m

o que são esses personagens? poderia haver mais semelhante?

Tentar usar tr para remover caracteres não imprimíveis apenas torna esses caracteres interessantes visíveis e remove a nova linha, o que é ruim:

[user@notebook test]$ cat a.txt | tr -cd '[:print:]'
[1mmusic[22m[1mmusicsheet[22m[1msheetmusic[22m[4m[24m[user@notebook test]$ 
    
por pepite 23.01.2017 / 12:28

2 respostas

0

A solução da @Toby Speight está bem. Alguma informação extra:

Normalmente, esses são os ansi "caracteres especiais" usados para produzir cores, efeitos especiais, posicionar o cursor, etc. no terminal.

por exemplo, grep --color=always '[a-z]*music[a-z]*' files > output produzirá caracteres como esse.

sed -r "s/\x1B\[[0-9;]*[a-zA-Z]//g"

Sugestão: verifique se você tem uma variável GREP_COLOR desatualizada definida como --color=always ou semelhante ...

    
por 23.01.2017 / 17:50
1

Você deseja remover sequências CSI ... m . Sabendo que eles contêm uma sequência de números separados por ; , você pode usar sed para substituir cada ocorrência por uma string vazia:

esc=$'\e'
sed "s/$esc\[[0-9;]*m//g" a.txt

Estou usando a sintaxe Bash para escrever o caractere de escape acima.

    
por 23.01.2017 / 14:06