0

好的,我又来了,与 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/

实际的评论是“新生活从这里开始”,但日志显示我们实际上是在“新生活”之前得到它,然后它在太空中中断。我尝试给 IFS 但没有用。可能我需要在遥控器上提供它,但我不知道该怎么做。有什么帮助吗?

4

2 回答 2

1

您的命令正在尝试egrep "$v" /$INSTALL_DIR/$PROP_BUNDLE.log在本地计算机上运行,​​并将结果作为通过 SSH 运行的命令传递。

我怀疑您的意思是要在远程计算机上运行该命令。删除内部$()以实现这一点(并修复引用):

commentsArray=($(ssh $sourceUser@$sourceHost "egrep '$v' '/$INSTALL_DIR/$PROP_BUNDLE.log'"))
于 2013-10-21T22:08:10.883 回答
0

您应该使用fgrep来避免输入中的正则表达式特殊解释:

commentsArray=($(ssh $sourceUser@$sourceHost "$(fgrep "$v" /$INSTALL_DIR/$PROP_BUNDLE.log)"))
于 2013-10-21T22:06:48.217 回答