2011-03-08 34 views
14

Aşağıdaki komut beklendiği gibi çalışıyor.ignorecase AWK

# some command | awk '/(\<^create\>|\<^alter\>|\<^drop\>)/,/;/' 
create table todel1 (id int) max_rows=2 
/*!*/; 
alter table todel1 engine=InnoDB 
/*!*/; 
create database common 
/*!*/; 
create database rules 
/*!*/; 

Ama bunu arama terimi tüm örneklerini dönecektir böylece awk açıklamada IGNORECASE anahtarını kullanmak istiyorum vs. "değiştirmek", "oluşturmak" sadece küçük harf ile eşleşir.

cevap

14

böylece gibi awk komutunun başına IGNORECASE = 1; ekleyin:

bash-3.2$ echo "Create" | awk '/^create/;' 
bash-3.2$ echo "Create" | awk 'IGNORECASE = 1;/^create/;' 
Create 
+11

Her girdi satırı için yürütülmesi gerekmediğinden, bunu "BEGIN" satırında veya komut satırında ayarlayın. –

+4

Bunun bir "gawk" olduğunu unutmayın. Ve Dennis'in ikinci noktasına göre, "awk"/regex demetleri/IGNORECASE = 1 ' – SiegeX

+1

Bu, awk sürüm 20070501, en azından çalışmaz. echo "Eşleşme yok" | awk 'IGNORECASE = 1;/^ create /;' 'Eşleşme yok. Regex'e ek olarak herhangi bir şeyiniz varsa, örtülü if ifadesini eklemiyor görünmüyor. – ceyko

5

Diğer bir seçenek eski awk sahip olanlar için IGNORECASE bayrak işe yaramaz burada:

echo "CreAte" | awk '/^[Cc][Rr][Ee][Aa][Tt][Ee]/;' 
+1

'eski bir awk 'olanlar ... gibi mac kullanıcıları :( –

+0

Geç cevap, biliyorum ama ..' GNU' sürümünü yüklemeye çalışın: http://brewformulas.org/Gawk @JoelMellon – klashxx

12

aşağıdaki satırı yürütür VEYA yerine bir VEYA testi: BEGIN özel sözcüğü e sorun: Bu yardımcı olur

echo -e "Create\nAny text" | awk 'BEGIN{IGNORECASE = 1}/^create/;' 
Create 

Umut.

Sebastien.