regex içine \ d veya [0-9] koyar girmez sed başarısız olur


1

'64'ü eşleştirmeye çalışıyorum:

state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,

ve çıkartın.

denedim

echo "$line" | sed -n -e 's/^.*keycode\s\([0-9]+\).*$/\1/p'

Aklımda hangi çalışması gerekir, ama işe yaramaz.

Biraz daha test ettikten sonra, basamağı girmeye başlayana kadar regex başarıyla eşleşiyor.

echo "$line" | sed -n -e 's/^.*keycode\s.*/test/p'

iyi çalışıyor, ama

echo "$line" | sed -n -e 's/^.*keycode\s\d.*/test/p'
echo "$line" | sed -n -e 's/^.*keycode\s[0-9].*/test/p'

ve boşluktan hemen sonra bir rakam olmasına rağmen ilgili çalışmaz.

Belli bir şeyi mi özlüyorum?


Kullanmam gereken anlaşıldı [[:digit:]], \ d desteklenmiyor ancak [0-9], çalışmamasının herhangi bir nedeni olmalı mı?
Brydon Gibson


"İş" ile tam olarak ne demek istiyorsun? [0-9] Benim için çalışıyor, normal ifadenin bir parçası olarak, iki basamaklı sayıyı giriş dizesinden çekmeme izin veriyor. echo "state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES," | sed -n -e 's/^.*keycode\s\([0-9]\{2\}\).*$/\1/p' çıktılar 64.
simlev

Bu ilginç, çünkü benim için değil. "{2}" yerine "+" sizin için çalışıyor mu?
Brydon Gibson

Evet, eğer kaçarsa: \+. Senin ne sed --version? sed (GNU sed) 4.4 İşte.
simlev

Yanıtlar:


2

Senin küçük bir hata var sed İfade: artı + karakterin kaçması gerekiyor.

echo "state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES," | sed -n -e 's/^.*keycode\s\([0-9]\+\).*$/\1/p'

çıktılar 64 beklenildiği gibi. Bizler için kullanılan PCRE Sözdizimi gibi diğer araçları kullanırken farklılıklara dikkat etmelidir. sed veya awkHer birinin kendine özgü karakter dizisi vardır, bazıları kaçmak zorundadır, bazıları kaçmaz.

Bir örnek \dPCRE’deki herhangi bir basamağın anlamına gelir ve sed, Cyrus'un yorumunda işaret ettiği gibi: [0-9] veya [[:digit:]] yerine kullanılmalıdır.

perl -e genellikle olduğu kadar yetenekli sed ve awk, sözdizimini tercih ediyorsanız kullanmayı düşünebilirsiniz. Yapmanız gerekenlere bağlı olarak, rakiplerinden daha fazla veya daha az karışık olabilir.

Görmek tanıtıcı haberler için perl -e, ile deney PCRE veya faydalı bir şey oku sed veya awk öğretici.

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.