
為什麼這個 sed 指令不刪除空白行?
sed -e 's/\r//g' -e '/^{$/d' -e '/^}$/d' -e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D' -e "s/'/''/g" -e '/^$/d' <<< $myvar
這個指令一切正常,除了最後一部分 -e '/^$/d' 用來刪除似乎什麼也不做的空白行。這是我的內容範例:
begin dump
Ctrl_ID:100
這與使用 cat -A 查看的內容相同
begin dump$
$
Ctrl_ID:100$
使用十六進位編輯器檢查空行表明它包含的只是一個具有十六進位值的字符
0A
每行末尾的程式碼完全相同。
我不明白這是怎麼回事。
^$
應該要匹配,不是嗎?
答案1
試試這個(空白行刪除現在位於第一個位置):
sed -e '/^$/d' -e 's/\r//g' -e '/^{$/d' -e '/^}$/d' -e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D' -e "s/'/''/g" <<< $myvar
負責空行刪除不起作用的部分是:
-e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D'
更深入...
D 刪除模式空間的內容,直到第一個換行符(如果沒有換行符,則刪除末尾),並開始新的循環。後者意味著如果 D 本身被執行,則 sed 程式中 D 之後的任何命令都不會被執行。
從這裡