没有ssh主机的输出“awk'{print $ 0}'/ path / to / log.txt”

时间:2012-06-04 18:01:39

标签: ssh awk

我正在尝试使用awk从远程计算机上的日志中提取一些数据,并注意到如果我进入计算机并运行

awk '{print $0}' /path/to/log.txt

我得到了预期的输出(包含日志消息,堆栈跟踪等),但是如果我运行

ssh host "awk '{print $0}' /path/to/log.txt"

然后输出如下所示:

0
1
0
0
1
1
1
1
1
1

为什么会发生这种情况的任何想法?

3 个答案:

答案 0 :(得分:6)

逃离美元符号。

ssh host "awk '{print \$0}' /path/to/log.txt"

因为单引号不保护本地的$0,所以它会被替换,因为它被发送到远程端。

您也可以尝试:

ssh host 'awk "{print \$0}" /path/to/log.txt'

保护远程端的$0,但需要对命令进行更多更改。

答案 1 :(得分:5)

没有反斜杠的一种方法:

ssh domain.tld <<'EOF'
awk '{print $1}' /var/log/syslog*
EOF

这使用 here-docs

man bash | less +/'Here Documents'

答案 2 :(得分:2)

试试这个:

ssh host "awk '{print}' /path/to/log.txt"

这是有效的,因为$ 0是打印的默认值。

如果命令中有$,则在脚本文件中创建命令会更简单。然后你可以这样做:

ssh host < cmdfile #cmdfile contains the command

单引号不会阻止变量扩展。脚本可以。