2013-02-15 147 views
0

我传递日期格式2013年2月3日至awk脚本,我需要把所有的匹配这个日期,如果我这样做了记录的情况下直接使用脚本我有逃跑的前锋斜线将字符串作为命令行参数传递时,转义如何工作?

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

但是,我不必逃避它作为命令行参数发送的情况下,我使用02/03/2013运行该脚本和awk命令更改为适应它。

任何人都可以向我解释当我们将字符串作为命令行参数发送时,字符的转义如何工作?有害的输入有哪些预防措施?任何与此相关的在线资源将非常感谢。

回答

4

正斜杠是不是在正则表达式特殊字符。它需要逃脱的原因是因为正则表达式常量使用正斜杠作为划分。通过使用被解释为正则表达式的字符串,这些都没有用,这样斜线不需要进行转义..

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

代替正则表达式匹配,你也许可以使用精确匹配

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

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

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

不要这样做,这很麻烦,容易出错。请参阅@ Scrutinizer的正确方法的答案(尽管我会使用-v var = value)。 – 2013-02-15 13:55:53

相关问题