なぜawkはFS="*"を理解できますが、FS="-*-"は理解できないのですか?

なぜawkはFS=

内容は次のテストファイルを受け取りました。

a -*- b

使用しましたがawk 'BEGIN {FS="*"} {print $2}' test印刷されます。

- b

正しい!しかし、 を使用すると、次のようなawk 'BEGIN {FS="-*-"} {print $2}' test結果が得られます。

*

私はFS正規表現がサポートされていることを知っているので、以前にそれを追加し、\まだこれを実行して*awk 'BEGIN {FS="-\*-"} {print $2}' test のようになりました。

*

幸い、私は半年前にブログを始めました。awk 'BEGIN {FS="-[*]-"} {print $2}' testこの場合に使用する必要があると言われています。したがって、私は以下を得る:

 b

また正解!

*しかし、なぜFSがそれを理解できるのか、理解できないのか-*--\*-そしてついに理解できるのか、本当に混乱しています-[*]-

メカニズムは何ですか?

ベストアンサー1

1文字より長い場合はFS正規表現として扱われます。 ofはFS単に*固定文字列として扱われますが、FSofは(one or more)と同等の-*-正規表現です。したがって、自分を普通の人物として見ることを許可する必要があります。そして両方ともこれを行うことができます。ただし、文字列は解析されます。-*--+-*-\*--[*]-FS二重- 割り当て時に一度、分割時に一度FS。そのため、エスケープ文字\もエスケープする必要があります。\

$ awk -F '-\\*-' '{print $2,FS}' test.txt
 b -\*-
$ awk -F '-\*-' '{print $2,FS}' test.txt
awk: warning: escape sequence `\*' treated as plain `*'
* -*-

おすすめ記事