检查非法字符的字符串

时间:2013-12-25 19:59:00

标签: regex string bash

我知道这个问题在这里被问过很多次,我已经阅读了所有答案。他们都很相似,我尝试了各种各样的变化,但似乎没有什么工作正常。 这是我的脚本文件:

#!/bin/bash
names=` cut -d" " -f1-3 $1 `
if [[ "$names" =~ ^[-a-zA-Z]+$ ]] ; then
    echo names are ok
else
echo bad names in file
fi

合法名称是仅包含a-z A-Z或“ - ”

的名称

$ 1是文件的名称,这就是它的内容:

olga geller haifa 56 43
sharon langer haifa 89 31

我基本上取了所有的名字(用cut命令)并将它们变成1个字符串 - >名 虽然所有名称都有效,但文件的这种变化给了我“文件中的错误名称”。 如果我把某个数字放在某个地方就会打印相同的数字。 如果我把'!'在[[]]内或“if”之后,它仍然无效。它只是为有效和无效的名称打印“名称正常”。 那么我的错误在哪里?

1 个答案:

答案 0 :(得分:2)

带有名称的字符串由换行符分隔,因此您必须搜索它们或每行read并单独测试它们以进行匹配。