Bu basit durumda neden sed açgözlü değil?


11
$echo "foo 65 bar" | sed -n -e 's/.*\([0-9]\+\).*/\1/p'
5

Çıktı neden olmasın 65? Sersem bir şekilde bu [0-9]\+parça ile eşleşmemeli mi? Sed'in hepsine uymasını nasıl söyleyebilirim 65?

Yanıtlar:


13

.*İlk açgözlü - 's eşleştirme foo 6. Orada durmasının tek nedeni, daha fazla eşleştirmenin tüm kalıbın eşleşmesini durduracağı 5için ([0-9]+). Eğer yaptıysanız ([0-9]*)yerine .*bütün çizgi eşleşir ve grubunuzda hiçbir şey elde ediyorum. Bunun bir yolu ilk bölüme sayıları eşleştirmemesini söylemektir:

$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65
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.