ฉันจะเก็บรหัสสีด้วยอินพุต grep ได้อย่างไร


15

ถ้าฉันใช้สองgrepคำสั่งติดต่อกันเช่น:

echo "foo bar" | grep foo | grep bar

จากนั้นรูปแบบแรก ("foo") จะไม่ถูกเน้น ในความเป็นจริงดูเหมือนว่า grep จะลบรหัสสีออกจากอินพุต มีวิธีใดในการป้องกันสิ่งนี้หรือไม่?


อีกคำถามที่มีคำตอบเดียวกัน: คุณจะเรียกคืนเอาต์พุตสีเป็น grep ภายในฟังก์ชัน bash ได้อย่างไร?
Camille Goudeseune

คำตอบ:


23

--color=alwaysใช้

grepตรวจสอบว่าการส่งออกเป็นไปป์ (หรือไฟล์) คุณไม่ต้องการสีมากที่สุดเมื่อเอาต์พุตเป็นไฟล์ - เนื่องจากเป็นลำดับ escape ของเทอร์มินัล โดยปกติ:

foo ^[[01;31m^[[Kbar^[[m^[[K

จากเช่น:

grep pattern file > result

--color=alwaysเพื่อแทนที่การใช้งาน

grep --color=always pattern file | ...

ตัวอย่าง:

มีไฟล์:

ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz

แล้วก็

grep --color=always ID file | grep --color=always 2013 | grep foo

จะสีID, และ2013foo

grep --color=always ID file | grep 2013 | grep foo

จะสีIDและแต่ไม่foo2013

1สำคัญ:คุณต้องจำไว้ว่าการเพิ่มความยุ่งเหยิงจากสีถูกส่งผ่านไปยังคำสั่งถัดไปในสายโซ่ เมื่อ ID เป็นสีคุณไม่สามารถ (ที่มีความสะดวก) ID=111ตรงเช่น


ในบางครั้งหนึ่งที่จะอาจจะต้องการสีขั้วในแฟ้ม ลองเช่น

 grep --color=always foo file > result
 cat result

แม้ว่าไฟล์ผลลัพธ์จะมีการพกพาที่ จำกัด มาก


สีตัวเองยังเป็นส่วนขยาย


ตามที่ระบุไว้โดยดี@slmคุณสามารถเพิ่ม:

export GREP_OPTIONS="--color=always"

ไปยังของคุณ.bashrcฯลฯแต่ไม่เว้นแต่คุณด้วยเหตุผลบางอย่างเข้าใจความหมายและยังคงต้องการที่จะทำ มันจะอยู่ในหลายวิธีที่จะทำลายgrepเนื่องจากข้อเท็จจริงดังกล่าวข้างต้น1

เพิ่มaliasถ้าคุณใช้บ่อย

 alias cgrep='grep --color=always'

GREP_OPTIONSและ--color ใช้เวลาสามตัวเลือก : never, และauto ทั้งสองคนแรกที่ควรจะเป็นคนเดียวที่รับการพิจารณาให้alwaysGREP_OPTIONS

นอกจากนี้คุณยังสามารถตรวจสอบGREP_COLORSในmanหน้าเว็บหรือGNU grep


รายละเอียดเพิ่มเติมเกี่ยวกับวิธีการนี้ข้อดี / ข้อเสียที่นี่: stackoverflow.com/questions/867877/…
slm

1
เพิ่มคำตอบนี้ด้วย: export GREP_OPTIONS="--color=always"ใน. bashrc ทำให้ตัวเลือกเป็นค่าเริ่มต้นสำหรับ greps ใด ๆ และคุณก็ถูกจับได้ดีทีเดียว!
slm

สิ่งดีๆในคำถาม & คำตอบ Super Uuser นี้: superuser.com/questions/36022/…
slm

"grep ตรวจพบว่าเอาต์พุตเป็นไพพ์" - aha! นี่คือกุญแจไขไม่ได้ระบายสีถ้ามันเป็นส่วนหนึ่งของไปป์ ควรมีหลักการแทนที่สิ่งเหล่านี้: - /
Chris2048

@ Chris2048: นี่เป็นมาตรฐานสำหรับเครื่องมือส่วนใหญ่ในการพิมพ์สีไปยังเทอร์มินัล คุณอาจพบว่าบางรายละเอียดเพิ่มเติมตามนี้ในวิธีการที่จะตรวจพบและสิ่งนี้แสดงให้เห็นบางประเด็นโดย LS เช่นและสีใน OSX พื้นเมืองlscoreutils และ GNU
Runium
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.