2016-04-03 15 views
1

Ben Mac OS X grep kullanarak dizin içindeki CSV'lerden e-postaları tanımlamak için benim amaçlar için yeterli çalışıyor Bu normal ifadenin: Ben yerini böyleceBir dizindeki tüm CSV'lerden e-postaları nasıl temizlerim?

grep --no-filename -E -o "\b[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" * 

denedim bu sed ile çalışan almak için [email protected] ile e-postaları:

sed -E -i '' -- 's/\b[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b/[email protected]/g' * 

Ancak, o iş için görünmektedir olamaz. Kuşkusuz, sed ve regex benim güçlü noktalarım değil. Herhangi bir fikir?

+1

Lütfen, regex'in 'myAddress + extension @ gmail.com'da başarısız olduğunu unutmayın. 'BenimAdresim' bırakır. – Laurel

+0

Evet, bu doğru. Regex için bir e-posta oluşturmanın çok zor olduğunu biliyorum. Ama bu benim amaçlarım için yeterince iyi. Ben regex ile ilgili olarak, sed ile nasıl bütünleştirilebileceğimle ilgili olarak fazla ilgilenmiyorum. – foobar0100

+0

Dizindeki tüm dosyaları değiştirmek istiyor musunuz? – rock321987

cevap

0

OSX içinde sed bozuktur. OSX'de bir paket için yedek olarak kullanılacak Homebrew kullanarak GNU sed ile değiştirin. Kurulum

sudo brew install gnu-sed 

için bu komutu kullanın ve Sen grep ve sed aynı regex lehçesini desteklemek olduğunu varsaymak gibi görünüyor substitution

sed -E -i 's/\b[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b/[email protected]/g' * 

Reference

+2

"Kırık" nasıl? Bağlamakta olduğunuz örnek, yanlış sözdizimi kullanan birisini gösterir ve daha sonra sedesinin "kırılmış" olduğu sonucuna varır. –

+0

@BenjaminW. Ben düzenli ifadesi 'sonlandırılmamış yerine' için googled ve bu bağlantıyı buldum ... aynı sed 'ubuntu' – rock321987

+1

üzerinde çalışıyor iyi değil çünkü "kırık" değil, çünkü onlar 'sed' betik dili farklı lehçeleri kullanmak . * BSD (ve dolayısıyla OSX) orijinaline ve POSIX'e daha yakınken, GNU 'sed'de çok sayıda standart dışı uzantı vardır. Bu uzantıları desteklememek "kırık" değildir; eğer bir şey varsa, bu uzantıları gerektiren bir betiktir. – tripleee

0

için kullanabilirsiniz, ama bu mutlaka değil veya hatta genellikle, dava. taşınabilir bir çözüm istiyorsanız

, kolayca bakın regex lehçelerin bir bakış bir bit için ... Ancak bir başka regex lehçesini destekleyen bu, için

perl -i -p -e 's/\b[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b/[email protected]/g' * 

Perl kullanabilirsiniz https://stackoverflow.com/a/11857890/874188

Normal ifadeleriniz berbat, ama anlıyorum ki buradaki noktadan birkaçı.