我正在嘗試使用sed命令通過以下步驟壓縮html文件:
刪除sed -e :a -re 's/<!--.*?-->//g;/<!--/N;//ba'
的評論
刪除空行的方式:sed '/^\s*$/d'
刪除前導空格的方式為:sed 's/^\s*//g'
刪除尾部空格的方式:sed 's/\s*$//g'
通過以下方式將所有行合并為一行:sed ':a; N; $!ba; s/\n//g'
以上命令來自網絡上的不同來源,包括Stackoverflow答案。
當我使用pipe(|
)操作符鏈接上面的命令時,它工作得很好。但是,當我嘗試使用單個sed命令時,有些函數無法工作:
sed -e :a -re 's/<!--.*?-->//g;/<!--/N;//ba; /^\s*$/d; s/^\s*//g; s/\s*$//g; :a; N; $!ba; s/\n//g'
盡管所有的行都被合并為一行,但注釋不會被刪除,空格也不會被刪除。
問題在哪里?如何解決?
問題是,有些命令旨在處理文件的每一行,而
N
則將下一行追加到模式空間中,b
則修改腳本執行流。這導致更多的命令只在文件的末尾執行,沒有更多的行可供讀取。注意:要解析XML文件,請使用XML解析器,而不是sed。
它可以通過“編程”來解決——逐個分析sed命令的目的,分析每個sed腳本的預期流,并重寫將按預期工作的代碼。