将字符串作为命令行参数传递时,转义如何工作?

时间:2013-02-15 09:58:28

标签: bash sed awk

我将这个格式的日期02/03/2013传递给awk脚本,我需要获取与此日期匹配的所有记录,如果我直接执行它而不使用脚本我必须转义前锋斜杠

awk '$4 ~ /02\/03\/2013/ {print $1}' 

但是,如果它作为命令行参数发送,我不必逃避它,我使用02/03/2013运行脚本并更改awk命令以容纳它。

有人可以向我解释当我们将字符串作为命令行参数发送时,字符的转义是如何工作的?对有害投入采取什么预防措施?

任何与此相关的在线资源都会非常感激。

2 个答案:

答案 0 :(得分:4)

正斜杠不是正则表达式中的特殊字符。它需要被转义的原因是因为正则表达式常量使用正斜杠本身作为分界。使用被解释为正则表达式的字符串时,不会使用这些字符串,因此不需要转义斜杠..

awk '$4~dd{print $1}' dd=02/03/2013

您可以使用完全匹配

,而不是正则表达式匹配
awk '$4==dd{print $1}' dd=02/03/2013

答案 1 :(得分:1)

您可以在bash中使用参数扩展:

date=02/03/2013
date=${date//\//\\/}            # Backslash all slashes.
awk "\$4 ~ /$date/ {print \$1}" # Prevent bash from expanding $1.