2013-03-17 123 views
2

我试图端口GNU sed的命令BSD的sed(在OSX)的命令是:sed的给我“:意外EOF(待定}的)错误,我不知道为什么

cat -- "$1" | sed -n -e "\${/^#/H;x;/${tapPrintTapOutputSedPattern}/p;}" \ 
-e "/${tapPrintTapOutputSedPattern}/{x;/${tapPrintTapOutputSedPattern}/p;b;}" \ 
-e "/^#/{H;b;}" \ 
-e "x;/${tapPrintTapOutputSedPattern}/p" \ 
-e "/^Bail out!/q" 

它适用于GNU sed的,但BSD sed中给出了这样的错误:

sed: 2: "/^Bail out!/q 
": unexpected EOF (pending }'s) 

这是可变的扩张后的命令,如果它是相关的:

cat -- "test021.tap" | sed -n \ 
-e "\${/^#/H;x;/^not ok\|^ok \([0-9]\+ \)\?# [tT][oO][dD][oO]\|^Bail out!/p;}" \ 
-e "/^not ok\|^ok \([0-9]\+ \)\?# [tT][oO][dD][oO]\|^Bail out!/{x;/^not ok\|^ok \([0-9]\+ \)\?# [tT][oO][dD][oO]\|^Bail out!/p;b;}" \ 
-e "/^#/{H;b;}" \ 
-e "x;/^not ok\|^ok \([0-9]\+ \)\?# [tT][oO][dD][oO]\|^Bail out!/p" \ 
-e "/^Bail out!/q" 

有关为什么/如何修复它的任何想法?

干杯!

+0

为什么你不去除零碎,直到问题消失?你可以自己解决,就像我们想的那样。 – 2013-03-18 00:23:07

+0

我一直在尝试,但是我对sed的了解很差,我希望有人更熟悉sed可以通过简单的检查来识别问题。我一直在努力,但;) – Raimondi 2013-03-18 01:55:12

+0

UUOC;你不需要在这里使用'cat'。 – 2013-03-18 06:38:35

回答

5

尝试使用换行符代替分号,至少在语句中的分支命令(b)之前。看看它是否有效:

sed -n " 
    \${ 
    /^#/H 
    x 
    /${tapPrintTapOutputSedPattern}/p 
    } 
    /${tapPrintTapOutputSedPattern}/{ 
    x 
    /${tapPrintTapOutputSedPattern}/p 
    b 
    } 
    /^#/{ 
    H 
    b 
    } 
    x 
    /${tapPrintTapOutputSedPattern}/p 
    /^Bail out!/q 
" "$1" 
+0

我已经放弃了,因为最新的OSX附带的sed是从2005年开始的,但是这个工作非常好。非常感谢! – Raimondi 2013-03-21 07:06:54

相关问题