我有以下命令;
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
我尝试了几种没有运气的逃避方法。任何建议都将深表感谢。感谢。
答案 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
也就是说,您需要在引用的字符串中转义引号和 $
符号。由于$
符号总是需要转义,因此在这种情况下需要对其进行双重转义,这就是\\\
。