看命令 - 处理报价

use*_*798 1 unix linux awk grep

我试图将以下命令传递给'watch'以便定期重复命令.

grep "foo bar" log_file.log | awk '$(NF-1) == 0'
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时:

watch -n 5 "grep \"foo bar\" log_file.log | awk '$(NF-1) == 0'"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

awk: cmd. line:1:  == 0<br>
awk: cmd. line:1:  ^ syntax error
Run Code Online (Sandbox Code Playgroud)

如何成功将此命令传递给"观看"?谢谢!

fed*_*qui 5

这是因为$(NF-1)表达.您需要转义,$以便awk在扩展期间在命令中解释它而不是之前:

watch -n 5 "grep \"foo bar\" log_file.log | awk '\$(NF-1) == 0'"
                                                 ^
Run Code Online (Sandbox Code Playgroud)