Grep'te yeni çizgi için bir kalıp nasıl verilir? Başlangıçta yeni satır, sonunda yeni satır. Normal ifade yolu değil. \ N gibi bir şey.
$. Biraz sınırlıdır, ancak basit durumlarda kullanılabilir.
Grep'te yeni çizgi için bir kalıp nasıl verilir? Başlangıçta yeni satır, sonunda yeni satır. Normal ifade yolu değil. \ N gibi bir şey.
$. Biraz sınırlıdır, ancak basit durumlarda kullanılabilir.
Yanıtlar:
grep desenler tek tek satırlarla eşleştirilir, bu nedenle bir modelin girdide bulunan bir satırsonu ile eşleşmesinin bir yolu yoktur.
Ancak bunun gibi boş satırlar bulabilirsiniz:
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
pcregrepnormal yerine deneyin grep:
pcregrep -M "pattern1.*\n.*pattern2" filename
-Mseçenek olarak satırbaşıyla arayabilirsiniz yüzden, birden fazla satıra eşleşmesini sağlar \n.
Bu şekilde kullanabilirsiniz ...
grep -P '^\s$' file
-PPerl düzenli ifadeleri için kullanılır (bir POSIX uzantısı grep).\sbeyaz boşluk karakterleriyle eşleşir; ardından gelirse *, boş bir satırla da eşleşir.^satırın başıyla eşleşir. $satırın sonuyla eşleşir. -Pbir GNU oluşumudur. Durum gerektirdiğinde (genellikle önden / arkaya bak) onu kullanmakta sorun yok, ancak POSIX grep bunu sadece [[:space:]].
-P. GNU zaten oldukça standarttır. :)
brew install grepBirkaç yönden üstün olan GNU grep'i edinmek isteyeceksiniz . apple.stackexchange.com/questions/193288/…
Teşekkür Ben -z seçeneği hakkında bilmek @jarno ve ben -P seçeneği ile GNU grep kullanırken, öğrendim aralarında eşlemek \nmümkündür . :)
Misal:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
Baskılar bar
Geçici çözümle ilgili olarak (taşınabilir olmayanları kullanmadan -P), yeni bir satır karakterini farklı bir karakterle geçici olarak değiştirebilir ve eski haline getirebilirsiniz, örneğin:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
Temel olarak tam eşleme için arıyor _foo_nerede _aracı \n(şimdiye __= \n\n). tr '_' '\n'Her desen zaten yeni satıra yazdırılacağından, onu geri çevirmeniz gerekmez , bu nedenle kaldırmak _yeterlidir.
<(p paste -sd_ file )?
new line at the beginningboş bir satırdır venew line at enddosyadaki her satıra uygulanır. Bir örnek gönderebilir misin?