Come mantenere un output colorato usando sed


10

Sto usando il sed comando e voglio mantenere l'output colorato del comando precedente. L'output di lsè colorato, ma l'output di sed non lo è. Sto usando OSX.

ls -la | sed -En  '/Desktop/q;p'

Risposte:


13

Su macOS, lsnon è GNU lse non accetta--color=always opzione che gli utenti Linux potrebbero aspettarsi per questa funzionalità.

Nella versione macOS di ls, i colori sono controllati da due variabili : $CLICOLORe $CLICOLOR_FORCE. Se viene definito il primo, il terminale specificato da $TERMsupporta il colore e l'output è verso un terminale, questo output verrà colorato, proprio come l' --color=autoopzione GNU . Se viene definita anche quest'ultima variabile, la condizione finale viene eliminata, comportandosi come quella di GNU --color=always.

Quindi, per far passare il colore sed, avresti bisogno di qualcosa di simile al seguente:

CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'

macOS lsha anche l' -Gopzione per abilitare il colore, ma non sono sicuro di come si comporti in una pipeline.
settembre

2
@ 8bittree Passing -Gequivale a definire $CLICOLOR(e quindi non sufficiente)
Fox

6

Immagino ciecamente che la tua distribuzione, come molti, abbia un alias lsa cui corrisponda ls --color=auto.ls -la --color=always | sed …dovrebbe funzionare.

(L' autoimpostazione fa, in linea di massima, lsverificare se il suo output va al display o meno, e solo il colore per il display. La ragione di ciò è che il colore è realizzato da sequenze di escape, ovvero caratteri di comando invisibili, quindi un programma potrebbe confonderli per parte del nome del file, cose del genere.)


3
L'ipotesi cieca è sbagliata. OSX non è una distribuzione Linux e non utilizza un'area utente GNU
Fox
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.