繁体   English   中英

Sed无法正常工作

[英]Sed does not work in expect

我制作了这种bash单行代码,用于列出运行完整路径的Weblogic实例,当我从shell运行它时效果很好。

/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort

我试图将其合并到期望脚本中

send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort ; echo ; echo\r"

但是我得到了这个错误sed:-e表达式#1,字符13:`s'的未知选项

请帮忙

可能是\\字符

sed 's/security\///'

在期望的上下文中需要额外的转义,例如

send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\\///' | sort ; echo ; echo\r"

如果没有仔细计数或测试,我会尝试在“ security \\”之后添加另一个\\ ,或者可能删除现有的\\。

另外,您可以将两个sed -e 's/weblogic.policy//' -e 's/security\\///'合并为一个: sed -e 's/weblogic.policy//' -e 's/security\\///'

使用Tcl的{}运算符,而不要在要发送的字符串两边加上双引号。 Tcl中的{}语法等效于bash中的单引号,表示“文字字符串,不解释其内容”。

在{}内,准确地输入了您希望Tcl / Expect发送到子进程的内容,一个字符一个字符,不需要额外的引用。

我认为这太复杂了,无法发送到远程主机。 而是将命令放在一个小的Shell脚本中并执行。 这样,您就不会因为报价扩展规则,转义等而遇到麻烦。

此外,您应该使用ssh而不是expect运行脚本。 expect是用于运行交互式命令(例如ftp ,而这些命令没有合适的脚本功能。

您可以尝试删除单引号并再次运行命令。

send "....... sed s/weblogic.policy// | sed s/security\/// ..."

它最有可能引用问题。 如果还不行,请尝试由hlovdal提出的建议

同时,您可以将一些冗长的命令组合在一起

/usr/ucb/ps auwwx |grep weblogic| tr ' ' '\n'|awk '/security.policy/&&/domain/{gsub("weblogic.policy|security","",$2);print $2}|sort 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM