Eğer bash yan tümcesi varsa regex kullanma


10

Şu bloklara bakın:

#!/bin/bash

str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
    echo "matched"
else
    echo "not matched"
    exit 1
fi

exit 0

Bu "eşleşen" yazdırmalıdır, ancak yazdırmaz. Nerede yanlış gidiyorum?

Yanıtlar:


21

Normal ifade eşleşmesinde alıntıyı kaldırmanız gerekir.

if [[ ${str} =~ m\.m ]]; then

Bash man sayfasından:

[...] == ve! = İle aynı önceliğe sahip ek bir ikili operatör, ~ ~ kullanılabilir. Kullanıldığında, operatörün sağındaki dize uzatılmış düzenli ifade olarak kabul edilir ve buna göre eşleştirilir (normal ifadede (3) olduğu gibi). Dize kalıpla eşleşirse dönüş değeri 0, aksi takdirde 1 olur. Normal ifade sözdizimsel olarak yanlışsa, koşullu ifadenin dönüş değeri 2'dir. Kabuk seçeneği nocasematch etkinleştirilirse, eşleme alfabetik karakterlere bakılmaksızın gerçekleştirilir. Desenin herhangi bir kısmı, onu bir dize olarak eşleşmeye zorlamak için alıntılanabilir.

Tırnak işaretleri ile eski dize eşleme kullanıyorsunuz.

Desende boşluklara ihtiyacınız varsa, onlardan kaçın:

str="m   m"
if [[ ${str} =~ m\ +m ]]; then

ancak çift tırnak işareti olmadan regex deseninde boşluk karakteri kullanamayız. Bunun için bir çözüm var mı?
Majid Azimi

1
Uzay gibi kaçılmalıdır \ .
ДМИТРИЙ МАЛИКОВ

Dinamik bir sayıyla biten bir dize bulmak ${str} =~ "needle"[0-9]{1}istersem kullanmalı ${str} =~ needle[0-9]{1}mıyım?
mgutt
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.