2013-06-18 27 views
5

Çok basit bir soru ama ... basit bir cevap bulmak içinFiltre olmayan alfabetik karakterler

Bütün alfabetik olmayan ve non kaldırmak için gereken bir bash betiği yazıyorum gibi olamaz -numerik karakterler. Örneğin. Ben bu iyi regex kullanarak çözmüş, ama komut etkili bu nasıl kullanılacağı emin değilim olacağını fark

INPUT_STRING="ABC# .1-2-3" 

OUTPUT_STRING= # some form of processing on $INPUT_STRING # 

echo $OUTPUT_STRING 
ABC123 

... istiyorum.

büyük takdir Tüm yardım ...

Sen a-z, A-Z veya 0-9 olmayan tüm karakterleri şerit sed kullanabilirsiniz

cevap

8

: sizin durumunuzda Yani

$ echo "ABC# .1-2-3" | sed 's/[^a-zA-Z0-9]//g' 
ABC123 

,

$ INPUT_STRING="ABC# .1-2-3" 
$ OUTPUT_STRING=$(echo $INPUT_STRING | sed 's/[^a-zA-Z0-9]//g') 
$ echo $OUTPUT_STRING 
ABC123 
+1

Tam olarak ihtiyacım olan şey, teşekkürler! – Rich

8
$ INPUT_STRING="ABC# .1-2-3" 
$ printf '%s\n' "${INPUT_STRING//[![:alnum:]]}" 
ABC123 
+1

Veya daha doğrusu, OUTPUT_STRING = "$ {INPUT_STRING // [! [: Alnum:]]}" ' – l0b0

+1

Teşekkürler, Değiştirilen değeri bir değişkende saklamak istedik. OUTPUT_STRING = $ {INPUT_STRING // [! [: Alnum:]]} 'işlevini kullanırdım, ancak atama bildiriminin sağ tarafı kabuk sözcüğü/alan bölme işlemine tabi tutulmaz, dolayısıyla tırnaklar gereksizdir. –

+1

Bir başka saf BASH çözümünün bir tembel forking sed/awk/perl P.O.S. – Orwellophile