Làm thế nào để giữ đầu ra màu bằng sed


10

Tôi đang sử dụng sedlệnh và tôi muốn giữ đầu ra màu từ lệnh trước đó. Đầu ra của lsmàu, nhưng đầu ra của sed thì không. Tôi đang sử dụng OSX.

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

Câu trả lời:


13

Trên macOS, lskhông phải là GNU lsvà không chấp nhận --color=alwaystùy chọn mà người dùng Linux có thể mong đợi cho chức năng này.

Trong phiên bản macOS của ls, màu sắc được kiểm soát bởi hai biến : $CLICOLOR$CLICOLOR_FORCE. Nếu trước đây được xác định, thiết bị đầu cuối được chỉ định bởi $TERMmàu hỗ trợ và đầu ra là thiết bị đầu cuối, thì đầu ra này sẽ có màu, giống như --color=autotùy chọn của GNU . Nếu biến sau cũng được định nghĩa, điều kiện cuối cùng sẽ bị loại bỏ, hoạt động giống như của GNU --color=always.

Vì vậy, để có màu sắc đi qua sed, bạn sẽ cần một cái gì đó như sau:

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

macOS lscũng có -Gtùy chọn bật màu, nhưng tôi không chắc nó hoạt động như thế nào trong một đường ống dẫn.
8bittree

2
@ 8bittree Passing -Gtương đương với việc xác định $CLICOLOR(và do đó không đủ)
Fox

6

Tôi sẽ mù quáng đoán rằng bản phân phối của bạn, giống như nhiều người, có bí danh ánh xạ lstới ls --color=auto. ls -la --color=always | sed …nên làm việc.

(Các autolàm cho khung cảnh, nói một cách rộng rãi, lskiểm tra nếu sản lượng của nó đi vào màn hình hiển thị hay không, và chỉ màu sắc cho màn hình. Lý do cho điều này là màu sắc được thực hiện bởi trình tự thoát, tức là nhân vật chỉ huy vô hình, do đó, một chương trình có thể nhầm lẫn giữa chúng đối với một phần của tên tệp, những thứ như vậy.)


3
Đoán mù là sai. OSX không phải là bản phân phối Linux và không sử dụng vùng người dùng GNU
Fox
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.