2013-03-17 122 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

相關問題