Soru grep’te bir "*" literal yıldız işareti bulunan bir satırı eşleştirmek


Denenmiş

$ echo "$STRING" | egrep "(\*)"

ve ayrıca

$ echo "$STRING" | egrep '(\*)'

ve sayısız diğer varyasyonlar. Sadece satırdaki herhangi bir yerde yıldız işareti içeren bir çizgiyi eşleştirmek istiyorum.


18
2017-10-17 03:13


Menşei


Ben sadece istediğimi elde edene kadar eğik çizgi eklemeye devam ediyorum. :) - Daren Schwenke
Her iki örneğiniz benim için çalışıyor (ayrıca kaldırılan parantezlerle çalışıyor). - Gordon Davisson


Cevaplar:


Bunun yerine bir karakter sınıfı deneyin

echo "$STRING" | egrep '[*]' 

17
2017-10-17 03:18



GnuWin32 ile Windows'da kullanabilirsiniz grep [*] file.txt. - Brian Burns
... tam anlamıyla bir dosya var mı? * Bunu çalıştırdığınız dizinde. Ders (özellikle bu örnekten değil, genel olarak), ne kadar önemsiz olursa olsun, her zaman düzenli ifadelerinize alıntı yapmaktır. - tripleee


kullanın:

grep "*" file.txt

veya

cat file.txt | grep "*"

5
2017-10-17 03:18



İlk yapabileceğinizden beri, ikincisi kedi ile gerekli değildir. - ghostdog74
Seni duyuyorum. Çoğu kişi, genellikle gereksiz olsa bile, bir dosyayı her tür programa akışını yapmak için kedi kullanmayı seviyor gibi görünüyor. Örneğin daha tanıdık görünmesini sağlamak için ekleyeceğimi düşündüm. - DaveParillo
Pencerelerden birinde GNUWin32 altında çalışanlar. - Itsme2003


echo "$STRING" | fgrep '*'

fgrep özel karakterleri eşleştirmek için kullanılır.


3
2017-10-20 05:23





İşte, bir yıldız yıldız işaretini eşleştirmenin bir yolu:

$ echo "*" | grep "[*]"
*
$ echo "*" | egrep "[*]"
*
$ echo "asfd" | egrep "[*]"
$ echo "asfd" | grep "[*]"
$ 

Bir ifadeyi parantez içinde sarmak genellikle tek bir özel karakteri kolayca yakalamanızı sağlar; Bu, örneğin bir sağ köşeli ayraç veya kısa çizgi için de çalışır.

Bu, parantez gruplandırmasında olmadığında dikkatli olun:

$ echo "hi" | egrep "*"
hi
$ echo "hi" | grep "*"
$

1
2017-10-17 03:18



Örneğiniz neden egrep'in bu davranışını rahatsız edici bulduğumu gösteriyor. Eğer grep ile basit bir dize araması yapmak istiyorsanız, sadece alıntılara koyun. Neden yapayım hiç her şey için grep ister misin? unix çağrıları 'cat' programıdır ;-) egrep'ten nefret ediyorum, çift tırnak içinde olsalar bile regex karakterlerini desteklemenizi zorlar. Rant sonu. Teşekkürler! - DaveParillo
@DaveParillo: ne grep ne de egrep, [e] grep başlatılmadan önce alıntılar kabuk tarafından yorumlandığından, bunları ilettiğiniz kalemin alıntılanıp aktarılmadığını bilmez. Fark, desen "ile başladığında grep ve egrep'in nasıl tepki verdiğinden"", teknik olarak yanlış biçimlendirilmiş""bir sonek". grep ".*" ve onun her şeyle eşleştiğini göreceksiniz. Bir değişmez (regex olmayan) arama yapmak isterseniz fgrep yerine. - Gordon Davisson