Bagaimana menjaga keluaran berwarna menggunakan sed

10

Saya menggunakan sedperintah dan saya ingin menjaga keluaran berwarna dari perintah sebelumnya. Output lsberwarna, tetapi output sed tidak. Saya menggunakan OSX.

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

Jawaban:

13

Di macOS, lsini bukan GNU lsdan tidak menerima --color=alwaysopsi yang mungkin diharapkan pengguna Linux untuk fungsi ini.

Dalam versi macOS ls, warna dikontrol oleh dua variabel : $CLICOLORdan $CLICOLOR_FORCE. Jika yang pertama didefinisikan, terminal yang ditentukan oleh $TERMmendukung warna, dan output ke terminal, maka output ini akan berwarna, seperti --color=autoopsi GNU . Jika variabel yang terakhir didefinisikan juga, kondisi terakhir dijatuhkan, berperilaku seperti milik GNU --color=always.

Jadi untuk memiliki warna yang dilewati sed, Anda perlu sesuatu seperti berikut:

CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
Rubah
sumber
macOS's lsmemang memiliki -Gopsi untuk mengaktifkan warna juga, tapi saya tidak yakin bagaimana berperilaku dalam pipa.
8bittree
2
@ 8bittree Passing -Gsama dengan mendefinisikan $CLICOLOR(dan karenanya tidak cukup)
Fox
6

Aku akan membabi buta menebak bahwa distribusi Anda, seperti banyak, memiliki alias yang memetakan lske ls --color=auto. ls -la --color=always | sed …harus bekerja.

( autoPengaturan membuat, secara umum, lsmemeriksa apakah outputnya masuk ke layar atau tidak, dan hanya warna untuk tampilan. Alasannya adalah warna diwujudkan dengan urutan pelarian, yaitu karakter perintah yang tidak terlihat, sehingga program dapat membingungkan mereka. untuk sebagian nama file, hal-hal seperti itu.)

Ulrich Schwarz
sumber
3
Tebakan buta itu salah. OSX bukan distribusi Linux dan tidak menggunakan GNU userland
Fox