Sed kullanarak bir basamak izleyen rakamlar nasıl eşleştirilir?


76

sedTüm desenleri hemen ardından boş bir dize tarafından bir nokta (örneğin 3., 355.) tarafından gösterilen rakamlarla değiştirmek için kullanmaya çalışıyorum . Bu yüzden deniyorum:

sed 's/\d+\.//g' file.txt

Fakat işe yaramıyor. Neden?


1
Bu makaleyi çok yararlı buldum
Stphane

Yanıtlar:


111

Sed perl olmadığından - sed regexes bir \dsteno yok:

sed 's/[[:digit:]]\+\.//g'

Burada düzenli ifade belgelerini sed .


3
Eğer sıfır veya daha fazla rakam istiyorsanız . Sıfır basamağa izin verdiğiniz /[[:digit:]]*\. /için dizeyle eşleşir foo.. İsterseniz bir veya daha fazla kullanılmasını \+gösterildiği gibi
Glenn Jackman

71

İki problem:

  1. seddesteklemiyor \d. [0-9]Veya kullanın [[:digit:]].

  2. +özel bir anlam kazanabilmek için ters takılmalıdır \+.


6
yerine göre -E seçeneğini kullanabilirsiniz (örneğin, Mac OS X üzerinde çalışmaz) + backslashing ait interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).Ne yazık ki, bu \ d konuda ... ile yardımcı olmuyor
gMale

4
@gmale: -EGNU sed için çalışmıyor, bunun -ryerine kullanır .
choroba

12
Tamam ... kesinlikle sedtaşınabilirlik söz konusu olduğunda berbat görünüyor ...
iconoclast

@choroba Sanırım bugün kendimi karıştırdım. Gürültülü yorumlarımı sileceğim ...
Steven Lu

Temel olarak, insanları uyarmaya çalıştığım şey şudur: Eğer genişletilmiş regex kullanmıyorsanız ( -EBSD sed ve -rGNU sed'de), BSD sed'de ne, ne +de \+(aynı ?), GNU sed'de çalışamazsınız. onları ters eğik çizgi ile çalışmalarını sağlayın. Bu nedenle komut
Steven Lu

3

Sed man sayfası re_format man sayfasına başvuruyor. 2 ayrım yapar: (1) genişletilmiş düzenli ifadelere karşı eski; (2) iyileştirilmemiş normal ifadeler ile karşılaştırılmamış. 4 kombinasyon da mümkündür. Hem eski hem de genişletilmiş sed için destek var, ancak her iki durumda da yalnızca gelişmiş olmayanlar için destek var. \ D operatörü, gelişmiş normal ifadelerin bir özelliğidir, bu nedenle sed tarafından desteklenmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.