【发布时间】:2017-07-15 00:20:12
【问题描述】:
我的脚本中有以下 awk 代码行,它从日志中搜索开始和结束模式之间的文本。
日志看起来类似于:
[zzzz] Static WEB3
[zzzz] capture me
[zzzz] capture me
[zzzz] capture me
[zzzz] end-pattern
可能是
[zzzz] Static WEB1 :: WEB2 :: WEB3
[zzzz] capture me
[zzzz] capture me
[zzzz] capture me
[zzzz] end-pattern
Awk 脚本:
awk "/\[zzzz\] Static ${VAR3} / || /${VAR1} :: ${VAR2} :: ${VAR3} /{flag=1;next} /end-pattern:/{flag=0}flag" /tmp/error.log
我收到了这些错误:
01:18:35 awk: cmd. line:1: /\[zzzz\] Static WEB3 / || /WEB1 :: WEB2 :: WEB3 /{flag=1;next} /end-pattern:/{flag=0}flag
01:18:35 awk: cmd. line:1: ^ syntax error
01:18:35 awk: cmd. line:1: /\[zzzz\] Static WEB3 / || /WEB1 :: WEB2 :: WEB3 /{flag=1;next} /end-pattern:/{flag=0}flag
01:18:35 awk: cmd. line:1: ^ syntax error
我不明白为什么我从 awk 获得上述 syntax errors,而上述代码在我的本地机器上完美执行(ubuntu 16.04,带有 bash GNU bash,版本 4.3.46(1)-release)。
我也尝试在: 之前使用\ 来逃避,但是我遇到了不同的问题。
01:18:35 awk: cmd. line:1: /\[zzzz\] Static WEB3 / || /WEB1 \:\: WEB2 \:\: WEB3 /{flag=1;next} /end-pattern:/{flag=0}flag
01:18:35 awk: cmd. line:1: ^ backslash not last character on line
01:18:35 awk: cmd. line:1: /\[zzzz\] Static WEB3 / || /WEB1 \:\: WEB2 \:\: WEB3 /{flag=1;next} /end-pattern:/{flag=0}flag
01:18:35 awk: cmd. line:1: ^ syntax error
我在这里错过了什么?
【问题讨论】:
-
如果您直接使用值而不是变量,脚本是否有效?
-
你能提供一个你正在尝试的文件的示例内容吗?
-
试试这个 - awk "/[zzzz]\ Static\ ${VAR3}/ || /${VAR1} :: ${VAR2} :: ${VAR3} /{flag=1;下一个} /end-pattern:/{flag=0}flag"