แสดงเส้นที่ตรงกันสำหรับ regex ที่กำหนดที่ Linux


-1

ฉันใช้สัญกรณ์ที่ไฟล์บันทึกของฉัน:

[บางสิ่งบางอย่างบางสิ่งบางอย่าง]

บางสิ่งจำเป็นและอักขระความยาวแปรผันและตัวเลข ไฟล์บันทึกพิเศษของฉันมีบรรทัดที่มีตัวอักษรอธิบายด้านบน นั่นคือ

Line 1: DEBUG [AS-kmksdf] Error occured!
Line 2: something somethingg..

ฉันต้องการรับบรรทัดที่ 1 ไฟล์บันทึกของฉันเติบโตขึ้นแบบไดนามิกและฉันแสดงที่หน้าจอด้วย

tail -f log.txt

ฉันจะแสดงบรรทัดพิเศษนั้นได้อย่างไร

ฉันรู้ว่าฉันจะใช้ grep และ regex ของฉันจะเป็น sth ชอบ

[[A-Z]*-[A-Z]*]

วิธีรวมเข้ากับคำสั่งนั้น สิ่งนี้ใช้ไม่ได้:

tail -f log.txt | grep [[A-Z]*-[A-Z]*]

ฉันใช้ cygwin กับ windows7 และสามารถเรียกใช้คำสั่ง linux บน cmd.exe ของฉันได้


ดูที่ grep.
soandos

การแก้ไขของคุณทำให้เป็นคำถามที่แตกต่างอย่างสิ้นเชิงและยังไม่ได้อธิบายอย่างแม่นยำถึงสิ่งที่คุณต้องการ นักพัฒนาที่ไม่มีประสบการณ์ยินดีที่จะทำงานกับ "ข้อกำหนด" ดังกล่าว ...
DevSolar

คำตอบ:


2

มีปัญหาสองสามอย่างเกี่ยวกับการแสดงออกปกติของคุณ:

  • ก่อนอื่นฉันขอแนะนำให้คุณใช้ -P สวิทช์ซึ่งช่วยให้ การแสดงออกปกติที่รองรับ Perl .

    โดยค่าเริ่มต้น, grep การใช้งาน การแสดงออกปกติขั้นพื้นฐาน ซึ่งไม่ได้ใช้กันอย่างแพร่หลายและต้องทนทุกข์ทรมานจากความไม่สอดคล้อง

  • อย่างที่เป็น [A-Z]วงเล็บมีความหมายพิเศษในการแสดงออกปกติ หากต้องการใช้เครื่องหมายวงเล็บแบบตัวอักษรใน PCREs ให้ใช้ Escape backslash: \[ หรือ \]

  • นิพจน์ทั่วไปจะคำนึงถึงขนาดตัวพิมพ์ -i สวิตซ์.

  • * วิธี ใด จำนวนครั้งที่เกิดขึ้นรวมถึง ( 0 ) คุณอาจต้องการใช้ + แทน (ใด ๆ บวก จำนวนที่เกิดขึ้น)

  • เสมอ ล้อมรอบการแสดงออกปกติของคุณด้วยเครื่องหมายคำพูดคู่หรือ bash จะขยายอักขระ

ดังนั้นคำสั่งต่อไปนี้จะทำงาน:

tail -f log.txt | grep -Pi "\[[A-Z]+-[A-Z]+\]"

ฉันได้แก้ไขคำถามของฉัน ฉันตระหนักถึงปัญหาอื่นสำหรับฉัน
kamaci

1
@kamaci: การแก้ไขของคุณต้องการแนวทางที่แตกต่างอย่างสิ้นเชิงดังนั้นจึงเป็นคำถามที่แตกต่างอย่างสิ้นเชิง แทนที่จะแก้ไขมันควรถามคำถามใหม่
Dennis

โอ๊ะโอคำสั่ง grep ของฉันไม่มีตัวเลือก -P อาจเป็นเพราะ cygwin
kamaci

นั่นอาจเป็นข้อผิดพลาด คุณสามารถติดตั้งได้ pcregrep หรือใช้แนวทางของ @ crizot
Dennis

1
ฉันย้อนกลับคำถามของฉันและคำถามใหม่คือ: superuser.com/questions/439249/...
kamaci

1
tail -f log.txt |grep -E '\[[a-zA-Z]*-[a-zA-Z]*\]'

คุณสามารถใช้ได้ Regexpal เพื่อทดสอบนิพจน์ regex ของคุณ นอกจากนี้คุณควรใช้ -E บน grep. ไม่จำเป็นและไม่จำเป็นในกรณีนี้ แต่ให้คุณใช้นิพจน์แบบขยายเพิ่มเติม


ซ้ำ ? ทำไม?
DevSolar

ขอโทษ ฉันแก้ไขคำตอบของฉันมันเป็น -E. มันไม่ได้บังคับ แต่ฉันใช้ -E เป็นกฎเพราะโดยปกติฉันทำงานกับนิพจน์แบบ regex ในกรณีนี้ไม่จำเป็น
fmanco

ดีจัง วิธีการรับบรรทัดทั้งหมดเริ่มต้นด้วยบรรทัดพิเศษนั้นจนกว่าบรรทัดจะเริ่มต้นด้วยหมายเลขหมายเลขและ: เช่นเดียวกับ 14:
kamaci

คุณพูดถูกเดนนิส ฉันแก้ไขคำตอบของฉัน ขอบคุณ
fmanco

@ Kamaci ฉันไม่คิดว่าสิ่งที่คุณต้องการเป็นไปได้ด้วยเพียงแค่ regex คุณจะต้องมีสิ่งที่ชอบ วัวกระทิง .
fmanco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.