Câu trả lời:
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 : $CLICOLORvà $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'
-Gtương đương với việc xác định $CLICOLOR(và do đó không đủ)
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.)
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.