จะค้นหาหลายบรรทัดในวิธีที่น้อยกว่าได้อย่างไร


18

ในlessคุณสามารถค้นหาโดยใช้/รูปแบบที่มีการขึ้นบรรทัดใหม่และขึ้นบรรทัดใหม่ได้หรือไม่ ฉันรู้ว่ารูปแบบของคุณสามารถจบลงด้วยการใช้บรรทัด$(จากฉันจะรวมบรรทัดใหม่ในการค้นหาน้อยลงได้อย่างไร ) แต่ฉันต้องการรูปแบบเพื่อจับคู่ข้อความที่ครอบคลุมหลายบรรทัด

ฉันพยายาม\nแล้ว แต่ก็แค่ค้นหาnตัวละคร


คุณลอง\n+ขึ้นบรรทัดใหม่ 1 รายการขึ้นไปหรือไม่
Brock Hensley

การกระจาย Linux ใดและคุณได้กำหนดตัวแปรสภาพแวดล้อม "LESS" หรือไม่
harrymc

@harrymc สิ่งนั้นจะช่วยให้มีการค้นหาหลายบรรทัดได้อย่างไร?
sashoalm

รวบรวมข้อมูล.
harrymc

2
สิ่งนี้เป็นไปไม่ได้โดยอิงจากการตรวจสอบซอร์สโค้ดสำหรับless( search.c:search_range()) การดำเนินการค้นหา / จับคู่ดำเนินการในบรรทัดที่คั่นด้วยบรรทัดใหม่ครั้งละหนึ่งดังนั้นคุณไม่สามารถจับคู่ข้ามเส้นเขตแดน ดูline.c:forw_raw_line()สำหรับการดำเนินงานของ "ReadLine" search_rangeเป็นเรียกได้ว่า
zackse

คำตอบ:


7

ไม่สามารถจับคู่ข้ามเส้นเขตแดนได้เนื่องจากฟังก์ชั่นการค้นหาในlessการทำงานในบรรทัดที่คั่นด้วยบรรทัดเดียวในแต่ละครั้ง นี่เป็นกรณีที่ไม่คำนึงถึงการใช้งาน regex ของระบบ (GNU, POSIX, PCRE ฯลฯ )

โปรดทราบว่าฉันไม่สามารถหาแหล่งเก็บข้อมูลอย่างเป็นทางการสำหรับการพัฒนาของการฉีด lessแต่สำหรับวัตถุประสงค์ของการตรวจสอบรหัสที่นี่ลิงค์ที่ตามมามาจากต้นไม้ contrib FreeBSD

ดูที่search.c: search_range ()สำหรับการใช้งานการดำเนินการค้นหา วนรอบนั้นเรียกline.c: forw_raw_line ()เพื่อดึงข้อมูลบล็อกที่คั่นด้วย newline ถัดไป บล็อกนั้นจะถูกส่งไปยังmatch.c: match_pattern ()โดยที่รูปแบบการค้นหา (นิพจน์ทั่วไป) จะถูกดำเนินการ

หากต้องการจับคู่ข้ามหลายบรรทัดคุณจะต้องใช้เครื่องมืออื่น ทางเลือกหนึ่งคือเข้าสู่โปรแกรมแก้ไขของคุณและใช้ความสามารถในการค้นหาตามที่ผู้อื่นแนะนำ คุณสามารถเรียกแก้ไขโดยการกดในvless


2

ไม่แน่ใจว่าจะทำอย่างไรlessแต่คุณสามารถทำสิ่งเดียวกันให้สำเร็จvimได้

http://vim.wikia.com/wiki/Search_across_multiple_lines

/PATTERN1\\_.\\{-}PATTERN2

อะตอม\\_.พบว่าตัวละครใด ๆ รวมถึงจุดสิ้นสุดของบรรทัด การ\\{-}แข่งขันหลายที่น้อยที่สุด


1
สิ่งนี้ไม่ได้ตอบคำถามเพราะมันมีค่าน้อยกว่าและไม่เป็นกลุ่ม มันควรจะเป็นความคิดเห็น
sashoalm

1
@sashoalm ยังคงมีความพยายามที่จะตอบดังนั้นฉันลงคะแนนมันและดำเนินการต่อไป ผู้ที่ค้นหาวิธีแก้ไขอาจไม่สามารถใช้เครื่องมือเดียวได้โดยเฉพาะ
slhck

2

lessกำลังใช้edไวยากรณ์ของ regex และไม่รองรับการจับคู่หลายบรรทัดอย่างน่าเสียดาย

https://www.gnu.org/software/gnulib/manual/html_node/ed-regular-expression-syntax.html#ed-regular-expression-syntax

ฉันหวังว่าจะพบว่าเช่นกันหรืออย่างน้อยพบว่าบิตไวยากรณ์นี้ถูกใช้ในless:

RE_DOT_NEWLINE หากตั้งค่าบิตนี้ตัวดำเนินการที่ตรงกับอักขระใด ๆ จะตรงกับบรรทัดใหม่ หากบิตนี้ไม่ได้ตั้งค่าก็ไม่ได้

ดังนั้นฉันสามารถใช้.+รูปแบบเพื่อจับคู่บรรทัดใหม่ แต่ไม่เป็นไร

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