我有一个命令,我想运行并从中获取输出。这是命令:
sh execute_odi_script.sh Audit_ExecutionLogStart.sql heelo
它应该返回
Begin Informatica Script 18 Redshift Delta copy completed at: 04/10/17 18:46:20 END
现在我需要只获取SQL文件的输出,在这种情况下为18
。
有人能够帮助我实现这一目标,但前提是我分两步完成:
> logStart=$( sh execute_odi_script.sh Audit_ExecutionLogStart.sql heelo )
> echo $logStart | sed -r s/.*Begin\ Informatica\ Script\ \(\.*\)\ Redshift\ Delta.*/\\1/ ); echo $logStart
18
我一直试图解决我如何进行命令替换,但我很难理解甚至改变什么。我如何在一行中完成所有这些?
答案 0 :(得分:0)
首先 - 如果您只关心一行,grep
为该行:
logStart=$( sh execute_odi_script.sh Audit_ExecutionLogStart.sql heelo \
| grep -e "Begin Informatica Script" \
| sed -r 's/.*Begin Informatica Script (.*) Redshift Delta.*/\1/' )
echo "$logStart"
或者,您可以在命令替换中使用整个管道:
logStart=$( sh execute_odi_script.sh Audit_ExecutionLogStart.sql heelo \
| tr '\n' ' ' \
| sed -r 's/.*Begin Informatica Script (.*) Redshift Delta.*/\1/' )
echo "$logStart"
如果您想避免将echo
作为单独步骤,可以在管道末尾添加| tee /dev/stderr
(同样, in $()
)。