我在研究中看到了这一行。
$temp = 'echo $line | sed s/[a-z AZ 0-9 _]//g'
IF($temp != '')
echo "Line contains illegal characters"
我不明白。不是取代功能吗?在代码中,[a-z AZ 0-9 _]应替换为''。我不明白这是如何确定$ line是否有非法字符的。
答案 0 :(得分:3)
sed
是一个流编辑器工具,它使用正则表达式来转换输入。命令
sed s/regex/replace/g
从stdin读取,每次找到匹配regex
的内容时,都会将其替换为replace
的内容。在您的情况下,命令
sed s/[a-z A-Z 0-9 _]//g
将[a-z A-Z 0-9]
作为其正则表达式,将空字符串作为其替换。 (你忘记了A和Z之间的划线吗?)这意味着任何与指示的正则表达式匹配的东西都会被删除。此正则表达式表示a
和z
之间,A
和Z
之间,0
和{之间的任何字符{1}},空格或下划线,"所以这个命令基本上从输入中删除任何字母数字字符,空格或下划线,并将剩下的内容转储到标准输出。测试输出是否为空,然后询问是否有任何不字母数字,空格或数字的字符,这就是代码的工作方式。
我建议将9
添加到您应该基本熟悉的工具列表中,因为在命令行中看到它是相当常见的工具。