Text-Processing
sed有條件移除EOL
對於以下範例,我們在末尾有“\”,應該刪除 \ 和 EOL 字元。
line 1\ line 2 line 3 line 4\ line 5
輸出應該是
line 1 line 2 line 3 line 4 line 5
使用 vi,我可以獲得以下內容:
:%s/\//n//g
但是當我在終端上執行它時不起作用。有什麼建議麼?
嗯… Vi 替換在我嘗試過的任何 Vi 編輯器中
:%s/\\\n/ /g
都不起作用。您可能是指在 Vim 中可以使用,但在 Vi 中不行。$ sed '/\\$/{N;s/\\\n/ /;}' file line 1 line 2 line 3 line 4 line 5
這會檢測目前行是否以反斜杠結尾,如果是,則附加下一行(
sed
將在它們之間添加換行符),用空格字元替換反斜杠和換行符。如果兩個連續的行末尾有反斜杠,這將失敗。為此,使用類似的東西
sed ':top;/\\$/{N;s/\\\n/ /;btop;}' file
在這裡,如果已經處理了帶有反斜杠的行,則程式碼跳回到開頭。
sed
最後一個腳本的註釋版本::top; # define label "top" /\\$/{ # the line ends with backslash N; # append next line to pattern space with embedded newline s/\\\n/ /; # substitute backslash and newline with space btop; # branch to "top" } # (implicit print)