使用GREP过滤掉一些输入

时间:2013-10-28 15:28:21

标签: linux grep input-filtering

回声“大家好!”

我需要检查linux脚本的输入参数是否符合我的安全需求。它应该只包含a-z字符,0-9位数字,一些空格和“+”符号。例如:“3分钟做r51 + r11”

这对我没用:

if grep -v '[0123456789abcdefghijklmnopqrstuvwxyz+ ]' /tmp/input; then
  echo "THIS DOES NOT COMPLY!";
fi

任何线索?

2 个答案:

答案 0 :(得分:0)

您想测试整行(假设/ tmp / input中只有一行),而不仅仅是单个字符是否匹配,因此您需要将其锚定到行的起始端。试试这个正则表达式:

^[0123456789abcdefghijklmnopqrstuvwxyz+ ]*$

请注意,您可以使用范围来缩短它:

^[0-9a-z+ ]*$

答案 1 :(得分:0)

你在说grep:

Show me every line that does not contain [0123456789abcdefghijklmnopqrstuvwxyz+ ]

这只会显示不包含上述字符的行。因此,仅包含()等其他字符的行会匹配,但asdf()将不匹配。

请尝试让grep向您显示上面列表中包含 charachter 的每一行:

if grep '[^0-9A-Za-z+ ]' file; then

如果您发现的不是数字,字母或加号,那么。