2012-11-28 83 views
1

我有一個文件:awk中 - 字段分隔符的行爲

CreateSec,explorer.exe,\\WINDOWS\\system32\\verclsid.exe,SUCCESS 

我想打印「$ 2」

例1

它運作良好:

$ awk -F '\\\\\\\\' '{print $2}' file 
WINDOWS 

例2

它運作良好:

$ awk -F '\\\\'+ '{print $2}' file 
WINDOWS 

例3

不打印。

$ awk -F "\\\\\\\\" '{print $2}' file 
. 

例4

所以它工作得很好:

$ echo "CreateSec,explorer.exe,\\WINDOWS\\system32\\verclsid.exe,SUCCESS" | awk -F '\' '{print $2}' 
WINDOWS 
---------------------------------------------------------------------------------- 

$ echo "CreateSec,explorer.exe,\\WINDOWS\\system32\\verclsid.exe,SUCCESS" | awk -F "\\" '{print $2}' 
WINDOWS 

問題:

  1. 爲什麼3例如不工作?
  2. 如何正確保存3個例子?
  3. 是什麼?:之間

    一)awk -F '\\\\\\\\'

    B上的差異)awk -F "\\\\\\\\"

謝謝你的解釋。

回答

3

關於(3) - 四個反斜槓的區別是:

  • 內部單引號,沒有元字符,所以殼經過8個反斜槓awk
  • 在雙引號內部,反斜槓轉義下面的字符,所以shell將4個反斜槓傳遞到awk
+0

謝謝你的解釋。我知道我可以按照以下方式保存示例3 - >'awk -F「\\\\\\\\\\\'''{print $ 2}'file' – Tedee12345