ตัวเลือกสีเริ่มต้น grep


11

grep เป็นหนึ่งในคำสั่งที่ใช้บ่อยที่สุดใน linux ฉันรู้สึกว่ามันเป็นคุณสมบัติพื้นฐานในการเน้นสตริงที่คุณค้นหาในบรรทัดเอาต์พุต สิ่งนี้สามารถทำได้โดย - ตัวเลือกสี

การพิมพ์ - ระบายสีทุกครั้งเป็นสิ่งที่น่ารำคาญและไม่เกิดผล มีวิธีใดที่จะเปลี่ยน grep ให้ทำงานเป็น grep --color

ฉันพยายามเขียนสคริปต์เล็ก ๆ ชื่อว่าgrepdและเพิ่มลงในตัวแปร PATH ของฉัน แต่การทำงานสคริปต์ไม่ได้เกี่ยวกับการป้อนข้อมูลgrepd ข้อเสนอแนะใด ๆ โปรด

#!/bin/bash
grep --color $1 $2

คำตอบ:


21

เพียงเพิ่มนามแฝงต่อไปนี้ลงในไฟล์กำหนดค่าของเชลล์เช่น.bashrcหรือ.bash_profile(ขึ้นอยู่กับสิ่งที่คุณใช้ดูที่นี่ ):

alias grep='grep --color=auto'

grepคุณก็สามารถใช้มันเป็น

โดยทั่วไปไม่จำเป็นต้องสร้างสคริปต์เมื่อนามแฝงคำสั่งง่าย ๆ ทำสิ่งเดียวกันได้ grepในความเป็นจริงสคริปต์ของคุณจะไม่ได้ทำงานถ้าคุณต้องการที่จะผ่านตัวเลือกมากขึ้นในการ ในกรณีที่คุณต้องการตัวอย่างเล็ก ๆ ที่สามารถจัดการกับข้อโต้แย้งที่คุณควรใช้ฟังก์ชั่น


9
หรือเทียบเท่าให้ตั้งค่าGREP_OPTIONSตัวแปรสภาพแวดล้อม:export GREP_OPTIONS='--color=always'
Jérôme

นี่ไม่ได้เพิ่มตัวเลือกสีถ้าคุณใช้ fgrep หรือ egrep คุณจะต้องใช้นามแฝงแยกต่างหากสำหรับสิ่งเหล่านั้น นอกจากนี้ @ Jérôme: GREP_OPTIONS ถูกทำเครื่องหมายว่าเลิกใช้แล้วในหน้า grep man
Thayne

@ พวกเขาเท่านั้นสำหรับ GNU grep และไม่ใช่คนอื่น ๆ เช่น FreeBSD grep และเท่าที่ฉันสามารถบอกได้มันเป็นเวลา 4 ปีแล้วนับตั้งแต่มีการเปลี่ยนแปลงและยังคงรองรับอยู่ ค่าเสื่อมราคาไม่ได้หมายถึงลบออก
CDE

นี่คือสิ่งที่ฉันมักจะทำ แต่ก็ไม่ได้ผลในบางกรณี ตัวอย่างเช่น: some_command | xargs grep fooจะไม่ถูกทำให้เป็นสีเนื่องจาก xargs ไม่ได้ใช้นามแฝง
TM

2
#!/bin/sh
exec grep --color "$@"

นี่แสดงให้เห็นถึงวิธีมาตรฐานในการ "ตัดคำสั่ง" ด้วยเชลล์สคริปต์เมื่อคำสั่งนั้นใช้งานไม่ได้ตามที่คุณต้องการ

execหลีกเลี่ยงการสร้างกระบวนการพิเศษ (หนึ่งสำหรับสคริปต์และหนึ่งสำหรับ grep) คุณสามารถปล่อยมันออกหากคุณต้องการ

"$@"จะถูกแทนที่โดยทั้งหมดของการขัดแย้งสคริปต์ที่ไม่ว่ากี่มี มันถูกต้องรักษาข้อโต้แย้งด้วยช่องว่างและตัวละครอื่น ๆ ที่เป็นพิเศษกับเปลือก


"grep exec" ควรเป็น "exec / bin / grep"
Berend de Boer

2
@BerenddeBoer ไม่ได้จริงๆ "exec grep" ก็ใช้ได้ดี ไม่มีอะไรผิดปกติในการค้นหาเส้นทางสำหรับ grep
Kenster

-1

ลองใส่ export GREP_COLORS='AUTO'~ / .bashrc ของคุณ - สำหรับฉันมันใช้งานได้

จาก man grep

       --color[=WHEN], --colour[=WHEN]
          Surround  the  matched (non-empty) strings, matching lines, context lines, file names, line numbers, byte offsets, and separators (for fields and groups of context lines) with escape sequences
          to display them in color on the terminal.  The colors are defined by the environment variable GREP_COLORS.  The deprecated environment variable GREP_COLOR is still supported, but  its  setting
          does not have priority.  WHEN is never, always, or auto.

5
GREP_COLORSเป็นชุดสีจริง การตั้งค่าเป็นAUTOไม่ควรแสดงสีใด ๆ ส่งออก GREP_OPTIONS = '- color = auto' ควรเป็นคำตอบ
user137369
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.