Daha az sayıda çok satırlı arama nasıl yapılır?


18

İçinde less, /satır başı ve satırsonu içeren bir kalıp kullanarak arama yapabilir misiniz ? Deseninizin kullanarak bir satırla bitebileceğini biliyorum $( daha az bir aramaya yeni satırları nasıl ekleyebilirim ? ), Ancak birden fazla satıra yayılan metni eşleştirmek için desene ihtiyacım var.

Denedim \n, ama bu sadece nkarakteri arar .


\n+1 veya daha fazla yeni satır denediniz mi?
Brock Hensley

Hangi Linux dağıtımı ve "LESS" ortam değişkenini tanımladınız?
harrymc

@harrymc Bu çok satırlı aramaya nasıl yardımcı olur?
sashoalm

Bilgi toplamak.
harrymc

2
less( search.c:search_range()) İçin kaynak kodunun incelenmesine bağlı olarak bu mümkün değildir . Arama / eşleme işlemi, bir defada yeni satırla ayrılmış tek bir satırda gerçekleştirilir, böylece satır sınırları boyunca eşleşemezsiniz. line.c:forw_raw_line()Çağrıldığı gibi "readline" ın uygulanmasına bakınız search_range.
zackse

Yanıtlar:


7

Satır sınırlarını aşmak mümkün değildir, çünkü içindeki arama işlevi lessbir kerede yeni satırla ayrılmış tek bir satırda çalışır. Sistem normal ifadesi uygulamasından (GNU, POSIX, PCRE vb.) Bağımsız olarak durum böyledir.

Ana hat gelişimi için resmi bir kaynak havuzu bulamadığımı lütfen unutmayın less, ancak burada kod inceleme amacıyla, aşağıdaki bağlantılar FreeBSD katkı ağacından alınmıştır.

Arama işleminin uygulanması için search.c: search_range () işlevine bakınız . Buradaki döngü , yeni satır sınırlamalı içerik bloğunu almak için line.c: forw_raw_line () öğesini çağırır . Bu blok, arama deseninin (normal ifade) yürütüldüğü match.c: match_pattern () öğesine geçirilir .

Birden çok hatta eşleştirmek için farklı bir araç kullanmanız gerekir. Bir seçenek, düzenleyicinize bırakmak ve arama özelliklerini başkaları tarafından önerildiği gibi kullanmaktır. Sen basarak editörü çağırabilir viçinde less.


2

Nasıl yapılacağından emin değilim less, ama aynı şeyi yapabilirsiniz vim.

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

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

Atom \\_., satır sonu dahil herhangi bir karakteri bulur. Çoklu \\{-}, mümkün olduğunca az eşleşir.


1
Bununla birlikte, bu soruya cevap vermez, çünkü vim değil, daha azdır. Bir yorum olmalı.
sashoalm

1
@sashoalm Bu hala bir cevap girişimi, bu yüzden oy vereceğim ve devam edeceğim. Bir çözüm arayan kişilerin özel olarak bir araç kullanması gerekmeyebilir.
slhck

2

lessedregex sözdizimi kullanıyor ve maalesef çok satırlı eşleşmeyi desteklemiyor.

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

Ben de bulmak umuyordum, ya da en azından bu sözdizimi bit kullanılmış olup olmadığını bulmak less:

RE_DOT_NEWLINE Bu bit varsa, herhangi bir karakterle eşleşen işleç bir yeni satırla eşleşir; bu bit ayarlanmazsa, ayarlanmaz.

Böylece .+yeni satırları eşleştirmek için desen kullanabilirim . Ama hayır, öyle değil.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.