内容は次のテストファイルを受け取りました。
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
単に*
固定文字列として扱われますが、FS
ofは(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 `*'
* -*-