好的,我在这里,再次与ssh挣扎。我正在尝试从基于令牌的远程日志文件中检索一些数据。我正试图通过ssh:
在egrep命令中传递多个令牌IFS=$'\n'
commentsArray=($(ssh $sourceUser@$sourceHost "$(egrep "$v" /$INSTALL_DIR/$PROP_BUNDLE.log)"))
echo ${commentsArray[0]}
echo ${commentsArray[1]}
commax=${#commentsArray[@]}
echo $commax
其中$ v类似于下面但它的长度是动态的。这意味着它可以通过管道分隔许多文件名。
UserComments/propagateBundle-2013-10-22--07:05:37.jar|UserComments/propagateBundle-2013-10-22--07:03:57.jar
我得到的输出是:
oracle@172.18.12.42's password:
bash: UserComments/propagateBundle-2013-10-22--07:03:57.jar/New: No such file or directory
bash: line 1: UserComments/propagateBundle-2013-10-22--07:05:37.jar/nouserinput: No such file or directory
0
值得注意的是,我的日志文件数据中包含空格。所以,在我给出的代码片段中,我想提取的实际注释在jar文件名之后开始,如: UserComments / propagateBundle-2013-10-22--07:03:57.jar / < / em>的
实际的评论是'新生活从这里开始',但是日志显示我们实际上已经将它推到'新'然后它在太空中断了。我试过给IFS但没用。可能我需要远程给它,但我不知道该怎么做。 有什么帮助吗?
答案 0 :(得分:1)
您的命令正在尝试在本地计算机上运行egrep "$v" /$INSTALL_DIR/$PROP_BUNDLE.log
,并将其结果作为通过SSH运行的命令传递。
我怀疑你的意思是要在远程机器上运行该命令。删除内部$()
以使其发生(并修复引用):
commentsArray=($(ssh $sourceUser@$sourceHost "egrep '$v' '/$INSTALL_DIR/$PROP_BUNDLE.log'"))
答案 1 :(得分:0)
您应该使用fgrep
来避免输入的正则表达式特殊解释:
commentsArray=($(ssh $sourceUser@$sourceHost "$(fgrep "$v" /$INSTALL_DIR/$PROP_BUNDLE.log)"))