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
pcregrep
normal yerine deneyin grep
:
pcregrep -M "pattern1.*\n.*pattern2" filename
-M
seç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
-P
Perl düzenli ifadeleri için kullanılır (bir POSIX uzantısı grep
).\s
beyaz 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. -P
bir 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 grep
Birkaç 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 \n
mü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 beginning
boş bir satırdır venew line at end
dosyadaki her satıra uygulanır. Bir örnek gönderebilir misin?