1

私はファイルを持っています:

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. 違いは何ですか?:

    a)awk -F '\\\\\\\\'

    b)awk -F "\\\\\\\\"

ご説明ありがとうございます。

4

1 に答える 1

3

(3) に関しては、4 つのバックスラッシュが違います。

  • 一重引用符内にはメタ文字がないため、シェルは 8 つのバックスラッシュを に渡しますawk
  • 二重引用符内では、バックスラッシュが次の文字をエスケープするため、シェルは 4 つのバックスラッシュを に渡しますawk
于 2012-11-28T16:24:55.700 に答える