2013-02-15 146 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

相關問題