在ssh中转义awk命令

时间:2014-01-09 17:06:19

标签: bash ssh awk

我有以下命令;

su user1 -c "ssh user1@192.168.1.2 awk '$5\==1{print\$3}' filename.log" | uniq -c

运行该命令会出错:

awk: ==1{print
awk: ^ syntax error
awk: cmd. line:1: ==1{print
awk: cmd. line:1:          ^ unexpected newline or end of string

我尝试了几种没有运气的逃避方法。任何建议都将深表感谢。感谢。

2 个答案:

答案 0 :(得分:2)

我会这样做:

su user1 -c "ssh user1@192.168.1.2 \"awk '\\\$5==1{print \\\$3}' filename.log\"" | uniq -c
                                   ^^                                    ^^

基本上,如果你是user1,首先你需要想象如何执行命令:

ssh user1@192.168.1.2 "awk '\\\$5==1{print \\\$3}' filename.log"

然后将其引入su user1 ...转义引号。

答案 1 :(得分:1)

逃避正确的方式非常棘手。你可以像这样写:

su user1 -c 'ssh user1@192.168.1.2 awk \"\\\$5 == 1 {print \\\$3}\" filename.log' | uniq -c

或者像这样:

su user1 -c "ssh user1@192.168.1.2 awk \'\\\$5 == 1 {print \\\$3}\' filename.log" | uniq -c

也就是说,您需要在引用的字符串中转义引号 $符号。由于$符号总是需要转义,因此在这种情况下需要对其进行双重转义,这就是\\\

的原因。