Ho uno script che produce colori e ho bisogno di liberarmene.Rimozione dei colori dall'output
#!/bin/bash
exec > >(tee log) # redirect the output to a file but keep it on stdout
exec 2>&1
./somescript
L'uscita è (in file di log):
java (pid 12321) is [email protected][60G[@[0;32m OK @[0;39m]
Non sapevo come mettere il carattere ESC qui, così ho messo @
al suo posto.
ho cambiato lo script in:
#!/bin/bash
exec > >(tee log) # redirect the output to a file but keep it on stdout
exec 2>&1
./somescript | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
Ma ora mi dà (in file di log):
java (pid 12321) is [email protected][60G[ OK ]
Come posso anche rimuovere questo '@[60G
?
Forse c'è un modo per disattivare completamente la colorazione per l'intera sceneggiatura?
Utenti BSD/OSX: Di solito non abbiamo l'opzione -r per sed. 'brew install gnu-sed' installerà una versione capace. Corri con 'gsed'. –
Se faccio 'echo" $ (tput setaf 1) foo $ (tput sgr0) bar "| sed -r "s/\ x1B \ [([0-9] {1,2} (; [0-9] {1,2})?)? [mGK] // g" | cat -A', ottengo: 'foo^O bar $' Quindi immagino che alcuni caratteri non siano stati rimossi correttamente, giusto? Sai come correggere? – edi9999
@ edi9999 Per quanto ne so, la differenza è che le impostazioni del colore oltre i 16 colori (come i supporti di 'setaf') richiedono più parametri di due; il mio regex supporta due. Cambiare il primo '?' Per '*' dovrebbe aiutare. La gestione di 'sgr0' è possibile ma basata su una ricerca che probabilmente cresce al di fuori dello scopo di questa risposta basata su regex. –