2013-05-09 18 views
5

Yetkim şu şekildedir:Bu sed komutu neden numarayla eşleşmiyor?

Number cats 

Ancak, gerçek sonucudur:

echo "12 cats" | sed 's/[0-9]+/Number/g' 

sonucun olmasını bekliyoruz (ben sed vanilya Mac kullanıyorum) :

12 cats 

Bu konuda bir fikri olan var mı? Teşekkürler! Özel anlamını elde etmek için ters eğik olmalıdır (

+0

Linux için, '-r' seçeneğini sed için kullanabilirsiniz, Mac için, '-E' kullanabilirsin ... ki bu da Linux'un bazı varyasyonları üzerinde uyumluluk bandı olarak çalışır. – Petesh

cevap

7

benim için çalışıyor:

echo "12 cats" | sed 's/[0-9][0-9]*/Number/g' 

Ayrıca -E anahtarı, + değiştirici çalışması choroba cevabını görecekti.

+0

BSD sed, varsayılan olarak' + 'desteklemiyor gibi görünüyor .. –

16

+. + değiştirici Genişleyen

echo "12 cats" | sed 's/[0-9]\+/Number/g' 
+1

Bu benim için işe yaramıyor. (Vanilyalı Mac Sed). – zoul

+0

@zoul: http://stackoverflow.com/q/4453760/1030675 – choroba

+2

Aha'ya bakın, teşekkürler! (Mac sed, '+ 'değiştiricisini tanımak için çok muhafazakârdır. -E' düğmesi,' + 'unscaped olduğu genişletilmiş normal ifadeleri açar.) – zoul

1

Perl kullanın, bu unix veya linux üzerinde çalışacaktır. (Bash bağlamında) globbing

: (şimdiye kadar var .. kaynaklarda en azından) açıklanamayan bir çok mistik yolla

echo "12 cats" | perl -pe 's/\d+/Number/g' 
0

, sonraki şartları hazır kontrol etmelisiniz , regex, senin soru için genişletilmiş düzenli ifade

bir öğretici tarafından ben size gerçek önce de -r eklemek gerekir okumak böylece sed verdiği expr' .... regex veya genişletilmiş regex gibi görünüyor sedef ...

echo "12 kediler" | sed -r '/ [0-9] +/Sayı/g'

Ubuntu'da çalışıyorum 16.04, bash.

+0

4 yıl önce görmedim .... muhtemelen benim cevabım artık çok önemli değil haha ​​..... yine de cevaptaki ilk hattımı vurgular. – YigalO

İlgili konular