这个sed命令行有什么作用?

时间:2016-12-19 22:44:37

标签: linux shell sed

我在研究中看到了这一行。

$temp = 'echo $line | sed s/[a-z AZ 0-9 _]//g'
IF($temp != '')
   echo "Line contains illegal characters"

我不明白。不是取代功能吗?在代码中,[a-z AZ 0-9 _]应替换为''。我不明白这是如何确定$ line是否有非法字符的。

1 个答案:

答案 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之间的划线吗?)这意味着任何与指示的正则表达式匹配的东西都会被删除。此正则表达式表示az之间,AZ之间,0和{之间的任何字符{1}},空格或下划线,"所以这个命令基本上从输入中删除任何字母数字字符,空格或下划线,并将剩下的内容转储到标准输出。测试输出是否为空,然后询问是否有任何字母数字,空格或数字的字符,这就是代码的工作方式。

我建议将9添加到您应该基本熟悉的工具列表中,因为在命令行中看到它是相当常见的工具。