2014-10-29 158 views
2

我想知道什麼是檢查一個

$str 

以最好的方式看它是否包含任何字符

[email protected]#$%^&*()_+ 

我想用ASCI值但有點糊塗了關於究竟如何,將可以實現的。

或者如果有更簡單的方法來檢查字符串值

+1

如果你只是想檢查非字母數字,順便說一下,這將是'[$海峽= * [^ [:alnum:]] *]'。 – 2014-10-29 03:13:14

+0

...或者檢查任何/各種標點,'[[$ str = * [[:punct:]] *]]'。一般來說,使用POSIX字符類(Linux中的man 7 regexp中的任何字符類都可以工作,即使glob樣式不是POSIX RE),而不是一個一個地列出字符是個好主意,如果有一個適合你(或者說否定)的角色類。 – 2014-10-29 03:15:05

回答

15

匹配它與glob。你只需要逃避的外殼,否則認爲特殊的人物:

#!/bin/bash 
str='some text with @ in it' 
if [[ $str == *['!'@#\$%^\&*()_+]* ]] 
then 
    echo "It contains one of those" 
fi 
1

使用EXPR

str='some text with @ in it' 
if [ `expr "$str" : ".*[[email protected]#\$%^\&*()_+].*"` -gt 0 ]; 
    then 
     echo "This str contain sspecial symbol"; 
     fi 
2

這是便攜式衝等人。和恕我直言更優雅。

case $str in 
    *['!'@#$%^&*()_+]*) echo yup ;; 
esac 
1

我想一個簡單的做法就像刪除任何字母數字字符和空格。 echo "$str" | grep -v "^[a-zA-Z0-9 ]*$"

如果你有一堆字符串,然後把它們放在一個文件,如strFile和以下命令將做必要的。

cat strFile | grep -v "^[a-zA-Z0-9 ]*$"

相關問題