1

次のコマンドを指定します。

cat 11 | awk -F"[\[\]]" '{print $1,$2}'        
cat 11 | awk -F"[\]\[]" '{print $1,$2}'

awkの出力が異なるのはなぜですか?

zxscgdb@linux:~/tmp> cat 11    
12-05 09:07:53:33 F[zxinit_lib.c] L[485] E[10106] process:zxsc_gdb is ok.    
12-05 09:08:03:35 F[zxinit_lib.c] L[485] E[10106] process:zxsc_gdb is ok.    
12-05 09:08:13:37 F[zxinit_lib.c] L[485] E[10106] process:zxsc_gdb is ok.

zxscgdb@linux:~/tmp> cat 11 | awk -F"[\]\[]" '{print $1,$2}'    
awk: warning: escape sequence `\]' treated as plain `]'    
awk: warning: escape sequence `\[' treated as plain `['    
12-05 09:07:53:33 F zxinit_lib.c    
12-05 09:08:03:35 F zxinit_lib.c    
12-05 09:08:13:37 F zxinit_lib.c    

zxscgdb@linux:~/tmp> cat 11 | awk -F"[\[\]]" '{print $1,$2}'    
awk: warning: escape sequence `\[' treated as plain `['    
awk: warning: escape sequence `\]' treated as plain `]'    
12-05 09:07:53:33 F[zxinit_lib.c] L[485] E[10106] process:zxsc_gdb is ok.     
12-05 09:08:03:35 F[zxinit_lib.c] L[485] E[10106] process:zxsc_gdb is ok.     
12-05 09:08:13:37 F[zxinit_lib.c] L[485] E[10106] process:zxsc_gdb is ok. 
4

2 に答える 2

4

私の理解では、区切り文字として使用[したいということです。]この場合:

awk -F '[][]' '{print $1,$2}' 11

(のように)]の直後のcharはそれ自体と見なされます。[[]]

于 2012-12-26T10:39:41.007 に答える
0

一重引用符を使用してシェルの解釈をバイパスする必要があります。

awk -F'[\\[\\]]' '{print $2,$4}' 11

または最初のバックスペースをエスケープします。

 awk -F"[\\\[\\\]]" '{print $2,$4}' 11
于 2012-12-26T01:58:11.810 に答える