ไฮไลต์เอาต์พุตการค้นหาคอนโซลในขณะที่แสดงเอาต์พุตคำสั่งทั้งหมด


19

เมื่อฉันใช้เช่นcat file.txt | grep --color=tty "pattern"ฉันได้รับรูปแบบที่ฉันค้นหาเน้น เมื่อฉันต้องการบางบริบทแต่ละรอบตี grep มี-A, -Bและ-Cพารามิเตอร์

อย่างไรก็ตามฉันต้องการที่จะแสดงไฟล์ทั้งหมด (หรืออะไรก็ตามที่ออกคำสั่ง) และเน้นรูปแบบที่แน่นอน มีคำสั่งหรือเครื่องมือไฮไลต์อยู่หรือไม่?


ตอนนี้คุณต้องการทำอะไรแตกต่างจากสิ่งที่คุณทำไปแล้ว?
Benjamin Bannier

คำตอบ:


22

มีคำตอบสำหรับ unix.stackexchange.comที่มีเล่ห์เหลี่ยมอย่างนี้:

grep -E --color 'pattern|$' file.txt

หรือ

grep --color 'pattern\|$' file.txt

ซึ่งตรงกับรูปแบบของคุณหรือจุดสิ้นสุดของบรรทัดในแต่ละบรรทัด เฉพาะรูปแบบที่ถูกเน้น


+1 ง่ายและปรับเปลี่ยนได้ง่ายกับ zgrep, bzgrep ฯลฯ ดีมาก!
Stefan Lasiewski

มีวิธีหลีกเลี่ยงการพิมพ์ --color ตลอดเวลาหรือไม่? ฉันคิดว่ามันค่อนข้างธรรมดาที่จะฝังตัวเลือกสีไว้ใน grep ไม่แน่ใจว่าทำไมเราถึงพิมพ์สีอย่างชัดเจนทุกครั้ง ฉันพยายามสร้างสคริปต์ว่าไฟล์ grepd มีทุบตีว่า grep --color $ 1 $ 2 แต่มันใช้งานไม่ได้ เบาะแสใด ๆ ที่นี่เพื่อแก้ไขโปรด
Srujan Kumar Gulla

1
@lordlupine: เพิ่มGREP_OPTIONS='--color'ไปยัง~/.bashrc(หรือแก้ไขการตั้งค่าเพื่อรวม--color) คุณจะต้องเริ่มต้นเทอร์มินัลใหม่หรือดำเนินการกำหนดนั้นที่บรรทัดคำสั่งในเทอร์มินัลปัจจุบันเพื่อให้มีผล
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

9

ผมชอบแอ๊กชั่น

ack --passthru somepattern filename

มันเหมือน grep แต่ดีกว่า มันไฮไลต์โดยค่าเริ่มต้นและมี--passthruตัวเลือกที่จะแสดงไฟล์ทั้งหมด (หรืออินพุตมาตรฐาน) แทนเฉพาะบรรทัดที่ตรงกัน


1
หากคุณกำลังพยายามไพพ์เอาต์พุตเป็น ack เช่นจากtailคุณต้องใช้--filterตัวเลือกนี้เช่นกัน ตัวอย่างเช่น:tail -f myLogFile | ack --filter --passthru pattern
กระจอก

5

ฉันยังแนะนำให้ใช้less(หรือเช่นนั้น) แต่ฉันต้องการแสดงวิธีแก้ปัญหาให้คุณมากขึ้น เมื่อคุณกำหนดฟังก์ชันนี้แล้ว:

ฟังก์ชั่นไฮไลท์ ()
{
    sed "s / $ 1 /` tput smso` & `tput rmso` / g" "$ {2: -}"
}

คุณสามารถใช้วิธีนี้:

command | highlight pattern
highlight pattern file.txt

หมายเหตุ:รุ่นนี้เป็นกรณีที่สำคัญการเปลี่ยนแปลงที่เพิ่งผนวกiหลังจากที่gในsedการแสดงออก


1
ฉันขอร้องtputแทนการเข้ารหัสค่า วิธีนี้คุณหลีกเลี่ยงการใช้echo -eซึ่งอาจมีผลกระทบอื่น ๆ
Ignacio Vazquez-Abrams

คุณพูดถูกแล้วฉันค้นหาโดยไม่มีโชค ขอบคุณ
cYrus

รุ่นนี้ไม่จำเป็นต้องใช้วงเล็บการจับภาพและสามารถเรียกใช้โดยprog | highlight "pattern"หรือhighlight "pattern" file:highlight () { local file=${2:--}; sed "s/$1/$(tput smso)&$(tput rmso)/gi" "$file"; }
หยุดชั่วคราวจนกว่าจะมีประกาศเพิ่มเติม

sedทักษะของฉันไม่มีอยู่จริง ฉันจะต้องเปลี่ยนสิ่งนั้นอย่างไรเพื่อให้ตรงกับตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ อย่างไรก็ตามฉันจะเพิ่มหนึ่งใน bash_functions ของฉันรวมถึง ขอบคุณมาก.
DerMike

@DerMike: ตอนนี้มันเป็นกรณี ๆ ไป
cYrus

3

การผ่าน-Cไปยังgrepสิ่งที่มีมูลค่าสูงพอจะทำสิ่งนี้


ฉันสาบานได้เลยว่าฉันจะได้รับอย่างอื่นเมื่อครั้งที่ฉันลอง (แต่ละคนตรงกับบริบทที่มีตัวคั่น '-----' อยู่ระหว่างนั้น) ตอนนี้คุณบอกฉันแล้วมันทำงานได้ดี :-) ขอบคุณ
DerMike

มันจะแยกแต่ละการแข่งขันหากมีบริบทไม่เพียงพอ
Ignacio Vazquez-Abrams

3

less กำลังเน้นรูปแบบดังนั้น

less -p 'mypattern' file.txt

หรือ

ridiculously | long | pipe | less

จากนั้นในน้อยกว่า/เพื่อค้นหารูปแบบที่จะถูกเน้น

หมายเหตุด้านข้าง:

คุณสามารถปรับปรุงคำสั่งของคุณตัวอย่างเช่น
ตั้งชื่อแทนalias grep="grep --color=tty"และใช้มันเหมือนที่:

grep 'mypattern' file.txt;

1
คุณควรละเว้นจากการใช้ GREP_OPTIONS ใช้นามแฝงแทน ดูที่: bugs.launchpad.net/ubuntu/+bug/67141
lesmana

ไม่ใช่ค่าขั้นต่ำ ลบออก
Coder ชั่วคราว

GREP_OPTIONS มีการใช้งานหลายรูปแบบgrep(zgrep, bzgrep, bzfgrep ฯลฯ ) ดังนั้นหากคุณต้องการให้ grep ทุกรูปแบบทำงานอย่างสม่ำเสมอคุณจะต้องตั้งชื่อแทนสำหรับ grep แต่ละรูปแบบ คำตอบใหม่ของ @ Casual ไม่ได้ใช้สำหรับสิ่งที่ชอบbzgrep pattern /var/log/messages.?.gzซึ่งเป็นตัวอย่างที่การเน้นสีเป็นประโยชน์อย่างมาก
Stefan Lasiewski

1

มีเครื่องมือsupercat ที่ดีซึ่งทำหน้าที่ตรงตามวัตถุประสงค์ ทั้งสองสามารถปรับสีเอาต์พุตคอนโซลของคุณและสร้าง html "เน้น" จากอินพุตของคุณ


ขอบคุณที่ดูดี อย่างไรก็ตามฉันไม่สามารถทำงานได้ในขณะนี้
DerMike

1
ลองดูที่ config ไฟล์มัน (ใน/etc/supercatบน Ubuntu) ซึ่งตั้งค่ากฎการระบายสีพวกเขามีพื้นสี / คู่ regexp (มีกฎพิเศษบางอย่าง); หน้าคนก็สั้นและดี
Ivan Tarasov

ฉันพบspcrcไฟล์ไวยากรณ์ของ vim ที่vim.org/scripts/script.php?script_id=2676
DerMike
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.