วิธีการคงสีเอาท์พุทโดยใช้ sed


10

ฉันใช้sedคำสั่งและฉันต้องการเก็บเอาท์พุทสีจากคำสั่งก่อนหน้า ผลลัพธ์ของlsมีสี แต่ผลลัพธ์ของ sed ไม่ใช่ ฉันใช้ OSX

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

คำตอบ:


13

บน macOS lsไม่ใช่ GNU lsและไม่ยอมรับ--color=alwaysตัวเลือกที่ผู้ใช้ Linux อาจคาดหวังสำหรับการทำงานนี้

ในรุ่น MacOS ของlsสีจะถูกควบคุมโดยสองตัวแปร : และ$CLICOLOR $CLICOLOR_FORCEหากกำหนดไว้ก่อนหน้านี้เทอร์มินัลที่ระบุโดย$TERMรองรับสีและเอาต์พุตเป็นเทอร์มินัลเอาต์พุตนี้จะมีสีเหมือน--color=autoตัวเลือกของ GNU หากตัวแปรหลังถูกกำหนดไว้เป็นอย่างดีสภาพสุดท้ายหลุดทำตัวเหมือน --color=alwaysGNU

หากต้องการให้สีผ่านไปsedคุณจะต้องมีสิ่งต่อไปนี้:

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

macOS lsมี-Gตัวเลือกในการเปิดใช้งานสีเช่นกัน แต่ฉันไม่แน่ใจว่ามันทำงานอย่างไรในไปป์ไลน์
8bittree

2
@ 8bittree Passing -Gนั้นเทียบเท่ากับการกำหนด$CLICOLOR(และดังนั้นจึงไม่เพียงพอ)
Fox Fox

6

ฉันสุ่มสี่สุ่มห้าจะเดาว่าการกระจายของคุณเช่นเดียวกับคนที่มีนามแฝงว่าแผนที่ไปls ควรทำงาน.ls --color=autols -la --color=always | sed …

(การautoตั้งค่าทำให้พูดอย่างกว้าง ๆlsตรวจสอบว่าเอาต์พุตไปที่จอแสดงผลหรือไม่และมีเพียงสีสำหรับจอแสดงผลเหตุผลสำหรับเรื่องนี้คือสีที่รับรู้ได้โดยลำดับการหลบหลีกเช่นตัวอักษรคำสั่งที่มองไม่เห็นดังนั้นโปรแกรมอาจสร้างความสับสน ส่วนหนึ่งของชื่อไฟล์สิ่งต่าง ๆ เช่นนั้น)


3
คนตาบอดเดาผิด OSX ไม่ใช่การกระจาย Linux และไม่ใช้ GNU userland
Fox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.