使用awk时,在exp_send中转义^符号

时间:2017-03-15 18:15:43

标签: tcl expect

所以我需要从expect脚本传递Awk命令来识别包含特定八位字节的eth接口,我目前正在做,

exp_send "ip addr show | awk -F: '/\^\[0-9\]/ {dev=\$2} /inet .*\\.227/ {print dev; exit}' \r"

问题在于/\^\[0-9\]部分,单个\无效,我也尝试添加\\,这似乎也无法发挥作用。

还尝试将整个awk内容包装在{..}内,而这些内容也无效。

exp_send "ip addr show | awk -F: {/^\[0-9\]/ {dev=\$2} /inet .*\.227/ {print dev; exit}} \r"

如何解决这个问题的任何线索将不胜感激。

根据@whjm的建议更新,我启用了内部调试器选项

exp_internal -f /tmp/debug 1
exp_send "ip addr show | awk -F: '/^\[0-9]/ {dev=\$2} /inet .*\\.227/ {print dev; exit}'\r"
exp_internal 0

生成信息

send: sending "ip addr show | awk -F: '/^[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'\r" to { exp13 }

并且终端设备上的控制台捕获产生,

$ send: sending "ip addr show | awk -F: '/[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'\r" to { exp13 }
ip addr show | awk -F: '/[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'

^字符在发送时有些丢失。

2 个答案:

答案 0 :(得分:1)

似乎需要关注外部引号。尝试

exp_send {ip addr show | awk -F: '/^[0-9]/ {dev=$2} /inet .*\.227/ {print dev; exit}'}
# .......^ using Tcl non-substituting quotes, so inside stuff does not need escaping
exp_send "\r"

答案 1 :(得分:1)

如果您想使用双引号(例如,在其中包含一些$var):

exp_send "ip addr show | awk -F: '/^\[0-9]/ {dev=\$2} /inet .*\\.227/ {print dev; exit}'\r"

用Tcl语言:

  1. ^'并不特别。
  2. {在双引号("...")中并不特殊。