3

コードでこの構文エラーが発生します。さまざまな場所に引用符を入れようとしましたが、運がありません。誰か助けてください。ありがとう!

awk: non-terminated string  | grep Re... at source line 1
 context is
     >>>  <<< 
awk: giving up
 source line number 2
awk '/ (TCP|UDP) / { split($5, addr, /:/); 
cmd = "/bin/geoiplookup " addr[1] | grep 'Rev 1:' | sed 's/Rev 1: //g' " | awk -F', ' '{print $4",", $3",", $2}'; 
cmd | getline rslt; 
close(cmd); 
print $1, $2, $3, $4, $5, $6, rslt }' < "$IP_PARSED" >> "$BlockedIPs"
4

3 に答える 3

2

への引数awkは終了していません。 awkパイプラインの残りの部分を解釈していて、混乱しています。実際にパイプラインを awk スクリプトの一部にする場合は、awkスクリプトをファイルとして記述する (囲んでいる一重引用符を削除する) か、最も外側の一重引用符を二重引用符に置き換えて、間にある二重引用符\をエスケープするために使用することを検討してください。残念ながら、一重引用符をネストすることはできません。

于 2012-04-25T01:08:03.207 に答える
1

私たちは以前ここにいたと思います。内で複雑な処理を実行しようとしないでくださいcmd。これを使用して外部コマンドを実行し、メインの AWK プログラム内で処理を行います。

awk '/ (TCP|UDP) / { split($5, addr, /:/); 
cmd = "/bin/geoiplookup " addr[1] ; 
while (cmd | getline rslt) {
    if (rslt ~ /Rev 1: /) {
        gsub(/Rev 1: /, "", rslt)
        split(rslt, r, ",")
    }
}
close(cmd); 
print $1, $2, $3, $4, $5, $6, r[4], r[3], r[2] }' < "$IP_PARSED" >> "$BlockedIPs"
于 2012-04-25T04:36:35.570 に答える
1

一重引用符の中に一重引用符を埋め込もうとしています。これは動作しません; さらに、シェルはそれらを簡単に埋め込む方法を提供しません。いくつかの複雑な方法があります。たとえば、

$ echo 'hello'"'"'world'
hello'world
$ echo 'hello'\''world'
hello'world

注:二重引用符の場合と同様に、埋め込み\'は機能しません。

$ echo 'hello\'world'
hello\'world
于 2012-04-25T01:14:33.237 に答える