1
我有最難的時間試圖找出如何編寫sed
腳本;特別是與標籤和分支。Sed腳本分支問題
例如,我想刪除文本文件中的所有換行符(\n
)。如果我在命令行上執行此操作,請執行以下操作:
sed -e ':a;N;$!ba;/s/\n/ /g' testfile.txt
確實如我所料;所有的換行符都被刪除。
這個問題是在,如果我把命令到一個腳本文件(scrub.sed)這樣:
:a
N
$!b a
s|\n| |g
與
sed -f scrub.sed testfile.txt
我收到以下錯誤,執行:
sed: 3: scrub.sed: whitespace after branch
sed: 5: scrub.sed: undefined label 'a '
我想要遵循所描述的語法here
:top
command1
command2
/pattern/b top
command3
我在FreeBSD中使用nano編輯文件,在分支之後我找不到任何「空白」。我究竟做錯了什麼?
即使在強制POSIX模式下,你的腳本在GNU'sed'上也能正常工作。甚至當我在標籤後添加更多空格時。我建議你用十六進制打印腳本(使用'hd'或'od'),並檢查該標籤後面是否有空格,包括'\ r'等。另外,你可以嘗試添加分號,例如':a;'和'$!ba;'。 – randomir
@randomir - 感謝您的建議。我最初嘗試添加分號後無效。 'hd'顯示了一些空格,沒有'\ r',但我不知道它來自哪裏。我能夠解決它。 – Allan