我有这个
if [[ ! $newstring == *['!'@#\$%^\&*()_+]* ]]
then
echo Error - Does not contain One Special Character - $newstring
i=$((i+1))
fi
检查字符串中是否只有一个字符来自银行,我想检查它是否有多个字符?
最好的方法是什么?
答案 0 :(得分:2)
添加第二个课程
if [[ "$newstring" != *['!'@#\$%^\&*\(\)_+]*['!'@#\$%^\&*\(\)_+]* ]]
或剥去其他任何东西并检查长度
t="${newstring//[^!@#\$%^\&*()_+]}"
if [ ${#t} -lt 2 ]
答案 1 :(得分:1)
我们可以使用tr
来解决它。
$ string='Hello-World_12@$@#*&%)(!@#@#'
$ number=$(( $(tr -d '[[:alnum:]]' <<< "$string"|wc -m) - 1 ))
$ echo "We have $number of special characters"
$ 16
这应该简短快捷。
答案 2 :(得分:0)
#!/bin/bash
a='!*@%6789';
if [[ `echo $a | sed "s/\(.\)/\1\n/g"|grep -c "[[:punct:]]"` -gt 1 ]]; then echo shenzi; else echo koba; fi
答案 3 :(得分:0)
grep
可用于提供匹配
grep -oP "^[^'\!'@#\$%^\&*()_+]*['\!'@#\$%^\&*()_+][^'\!'@#\$%^\&*()_+]+$"
测试
$ echo "#asdfasdf234" | grep -oP "^[^'\!'@#\$%^\&*()_+]*['\!'@#\$%^\&*()_+][^'\!'@#\$%^\&*()_+]+$"
将字符串匹配为
#asdfasdf234
$ echo "#asdf#asdf234" | grep -oP "^[^'\!'@#\$%^\&*()_+]*['\!'@#\$%^\&*()_+][^'\!'@#\$%^\&*()_+]+$"
与字符串
不匹配 if
构造可以是
echo $newstring| grep -oP "^[^'\!'@#\$%^\&*()_+]*['\!'@#\$%^\&*()_+][^'\!'@#\$%^\&*()_+]+$"
if [[ $? -eq 0 ]] > /dev/null
then
echo Error - Does not contain One Special Character - $newstring
i=$((i+1))
fi
这里是正则表达式
^[^'\!'@#\$%^\&*()_+]*['\!'@#\$%^\&*()_+][^'\!'@#\$%^\&*()_+]+$
匹配具有特殊字符
的确切一次出现的所有字符串