Shell 将awk与ssh结合使用

Shell 将awk与ssh结合使用,shell,unix,ssh,awk,Shell,Unix,Ssh,Awk,我正在尝试远程运行一个命令,这就是我所拥有的 ssh host name“find~/dir1/dir2/-name blah\*-exec zgrep-nc pattern\{\}>/tmp/temp_file;awk'n问题是,$0在本地展开,因为命令引用了” 您可能希望将其转义为\$0 我还将使用管道来避免临时文件,并且作为个人偏好,使用xargs而不是find的-exec谓词 另外,grep的-n选项在使用-c时不起任何作用 我认为这应该相当于: ssh主机名“find ~/dir1/d

我正在尝试远程运行一个命令,这就是我所拥有的


ssh host name“find~/dir1/dir2/-name blah\*-exec zgrep-nc pattern\{\}>/tmp/temp_file;awk'n问题是,
$0
在本地展开,因为命令引用了

您可能希望将其转义为
\$0

我还将使用管道来避免临时文件,并且作为个人偏好,使用
xargs
而不是
find
-exec
谓词

另外,
grep
-n
选项在使用
-c
时不起任何作用

我认为这应该相当于:


ssh主机名“find ~/dir1/dir2/-name blah\*| xargs zgrep-c | awk'nWhy you's writing to temp file,而不是将
find
输出管道传输到
awk
?我刚开始学习awk,这是我第一次使用它,可能你建议的方法更好,但我只是想找到一个更容易编写的解决方案。是的,成功了。但是,在本地运行相同的命令时,不会对$0执行转义。您能解释一下转义$0的必要性吗?因为您有一个类似于
“…'$0'…”
的字符串,在
ssh
命令运行之前,它被本地shell扩展为
“…'/bin/sh'…”
。当您在本地运行命令时,您不会将它括在
字符中,因此您有
…'$0'…
,并且shell变量不会在
引号中展开