Sed无法预期

时间:2010-03-17 12:15:18

标签: linux bash sed 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 expression#1,char 13:`s'的未知选项

请帮忙

5 个答案:

答案 0 :(得分:2)

可能是

中的\字符
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"

答案 1 :(得分:1)

如果不仔细计算或测试,我会尝试在“安全性”之后添加另一个\,或者可能删除现有的sed -e 's/weblogic.policy//' -e 's/security\///'

此外,您可以将两个seds组合成一个:{{1}}

答案 2 :(得分:1)

在要发送的字符串周围使用Tcl的{}运算符而不是双引号。 Tcl中的{}语法等同于bash中的单引号,意思是“文字字符串,不解释其内容”。

在{}里面放置你想要的Tcl / Expect发送到子进程的字符,字符的字符,不需要额外的引用。

答案 3 :(得分:0)

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

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

答案 4 :(得分:-1)

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

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