2014-10-29 165 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 ]*$"

相关问题