ถ้าฉันใช้สองgrep
คำสั่งติดต่อกันเช่น:
echo "foo bar" | grep foo | grep bar
จากนั้นรูปแบบแรก ("foo") จะไม่ถูกเน้น ในความเป็นจริงดูเหมือนว่า grep จะลบรหัสสีออกจากอินพุต มีวิธีใดในการป้องกันสิ่งนี้หรือไม่?
ถ้าฉันใช้สองgrep
คำสั่งติดต่อกันเช่น:
echo "foo bar" | grep foo | grep bar
จากนั้นรูปแบบแรก ("foo") จะไม่ถูกเน้น ในความเป็นจริงดูเหมือนว่า grep จะลบรหัสสีออกจากอินพุต มีวิธีใดในการป้องกันสิ่งนี้หรือไม่?
คำตอบ:
--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
, และ2013
foo
grep --color=always ID file | grep 2013 | grep foo
จะสีID
และแต่ไม่foo
2013
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
ทั้งสองคนแรกที่ควรจะเป็นคนเดียวที่รับการพิจารณาให้always
GREP_OPTIONS
นอกจากนี้คุณยังสามารถตรวจสอบGREP_COLORS
ในman
หน้าเว็บหรือGNU grep
export GREP_OPTIONS="--color=always"
ใน. bashrc ทำให้ตัวเลือกเป็นค่าเริ่มต้นสำหรับ greps ใด ๆ และคุณก็ถูกจับได้ดีทีเดียว!
ls
coreutils และ GNU