【问题标题】:Filter out some input with GREP用 GREP 过滤掉一些输入
【发布时间】:2013-10-28 15:28:20
【问题描述】:

回声“大家好!”

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

这对我不起作用:

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

有什么线索吗?

【问题讨论】:

    标签: linux grep input-filtering


    【解决方案1】:

    你在告诉 grep:

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

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

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

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

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

    【讨论】:

    • 太棒了。请记住选中其中一个答案的复选标记,以便其他人可以看到问题已解决。
    【解决方案2】:

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

    ^[0123456789abcdefghijklmnopqrstuvwxyz+ ]*$

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-16
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      相关资源
      最近更新 更多