0

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

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

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

谁能向我解释当我们将字符串作为命令行参数发送时,字符的转义是如何工作的?对有害输入应采取哪些预防措施?

任何与此相关的在线资源将不胜感激。

4

2 回答 2

4

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

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

您可以使用精确匹配代替正则表达式匹配

awk '$4==dd{print $1}' dd=02/03/2013
于 2013-02-15T10:32:26.793 回答
1

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

date=02/03/2013
date=${date//\//\\/}            # Backslash all slashes.
awk "\$4 ~ /$date/ {print \$1}" # Prevent bash from expanding $1.
于 2013-02-15T10:08:26.157 回答