Tek bir grep
komut kullanarak iki farklı satırda olduklarında iki farklı ifadeyi nasıl arayabilirim ?
Örneğin
Satır 1: Bu bir tatlı.
Satır 2: limon.
Bunu kullandım ama sonuç yok
grep "sweet.*lemon" file_type
Tek bir grep
komut kullanarak iki farklı satırda olduklarında iki farklı ifadeyi nasıl arayabilirim ?
Örneğin
Satır 1: Bu bir tatlı.
Satır 2: limon.
Bunu kullandım ama sonuç yok
grep "sweet.*lemon" file_type
Yanıtlar:
grep
İki farklı çizgi kullanmak için her iki deseni de arayın
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
Veya alternatif kullanın
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
Bir kalıptan sonraki satırı almak için bağlam seçeneğini kullanabilirsiniz
$ grep -A1 sweet file_type
This is a sweet
lemon.
Ama bir çok satırlı desen için açıkça arama yapıyorsanız zor çünkü var grep
hatlarında sanıyor ... . Sizin .*
"tatlı" ve "limon" arasındaki irade yakalamak her şey hattında . Sonraki satıra yeni satırla eşleştirmek için -P
kullanarak "limon" alabiliriz ve dosyanın boş \n
bırakıldığını söyleyerek :grep
-z
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
-E
Genişletilmiş düzenli ifadeler kullanın ( |
karakterden kaçmak zorunda kalmadan değişimli olarak kullanmak için)-An
Desenden sonra ek satırlar yazdırın; burada n, yazdırılacak olan arka satır sayısıdır-P
Perl tarzı düzenli ifadeler kullanın ( daha iyi perl regex desteği için yerine "deneysel" in grep
- install pcregrep
)-z
Ayırıcı olarak null karakteri kullanın (sadece bu durumda davranarak, ama grep
bunun için bizim sözümüze olacak)-o
sadece eşleşen kısmı yazdır-o
... ile düzenlenmiştir ...
grep: The -P and -z options cannot be combined
- örn.
Bunun gibi:
grep "sweet\|lemon"
grep
"özel karakterler" gibi "standart modda" varsayılan eserleri ile |
, +
, *
kelimenin tam anlamıyla yorumlanır sürece onlar ters eğik çizgi maskeli ediyoruz. Örneğin bu cevaba bakınız . Muhtemelen alıştığınız şekilde kullanmak için, "özel karakterlerin" tam anlamıyla yorumlanması için maskelenmesi gerekir, "genişletilmiş moda" ( grep -E
) geçmeniz gerekir . Belki madneon örneğin neyi OP deneyin onun yanıtlara biraz daha ayrıntılı olabilir olurdu eşleştirdiniz?
grep -zP
komutu (bir maç orada bir yerde ise) o genel so ya bütün dosya içeriğini dökümü, tek bir çizgi olarak herhangi sıradan yeni satır ayrılmış bir dosyayı ele alacak (bir dosya tam olarak iki satırdan oluşan) bu özel durumda çalışacak veya hiçbirşey; genellikle insanların kullandığı şey bu değildirgrep
.