sed替換換行符「 n」

2021-09-07 19:42:21 字數 1569 閱讀 8712

在一次sed使用中,執行命令:

sed "s/\n//g" file

發現,沒起到任何效果。

後來,經查sed官方使用者手冊,才得知,sed是按行處理文字資料的,每次處理一行資料後,都會在行尾自動新增trailing newline,其實就是行的分隔符即換行符。

如果非要使用sed命令,實現替換file文字內容的換行符為空的話,那麼就要了解sed的分支條件命令,以及了解sed的pattern space模式空間和hold space保持空間。即,連續兩行執行一次sed命令,這樣就可以把前一行的\n替換完成。

sed and awk 筆記之 sed 篇:高階命令(一) 

sed and awk 筆記之 sed 篇:高階命令(二) 

最終程式和執行結果如下例所示:

qilei@afaaw-704030720:~$ cat a.txt

a11111

a22222

a33333

qilei@afaaw-704030720:~$ sed "s/\n//g" a.txt a11111 a22222 a33333 qilei@afaaw-704030720:~$ sed ":a;n;s/\n//g;ta" a.txt a11111a22222a33333 qilei@afaaw-704030720:~$

sed ":a;n;s/\n//g;ta" a.txt

n是把下一行加入到當前的hold space模式空間裡,使之進行後續處理,最後sed會預設列印hold space模式空間裡的內容。也就是說,sed是可以處理多行資料的。

:a和ta是配套使用,實現跳轉功能。t是test測試的意思。 

另外,還有:a和ba的配套使用方式,也可以實現跳轉功能。b是branch分支的意思。

branch迴圈到文字結束。比如sed ":a;n;s/\n//g;ba" a.txt,轉換成自然語言的描述,就是

while(1) 

test可以根據替換命令的完成是否成功,決定是否跳轉。比如sed ":a;n;s/\n//g;ta" a.txt,轉換成自然語言的描述,就是

while(state == 1)  else 

qilei@afaaw-704030720:~$ sed ":a;n;s/\n//g;$!ba" a.txt a11111a22222a33333 qilei@afaaw-704030720:~$

增加$!ba語句,$的意思是最後一行,不跳轉到標記a處,即退出命令迴圈。

同理,也可以用下述命令。

qilei@afaaw-704030720:~$ sed ":a;$!n;s/\n//g;ba" a.txt a11111a22222a33333 qilei@afaaw-704030720:~$

sed替換換行符

sed label n s n b label filename sed label n s n t label filename 上面的兩條命令可以實現將檔案中的所有換行符替換為指定的字串,如命令中的冒號。命令的解釋 label 這是乙個標籤,用來實現跳轉處理,名字可以隨便取 label 後面的b...

linux sed命令,如何替換換行符「 n」

linux sed命令如何替換換行符n 實現方法 在一次sed使用中,執行命令 sed s n g file發現,沒起到任何效果。後來,經查sed官方使用者手冊,才得知,sed是按行處理文字資料的,每次處理一行資料後,都會在行尾自動新增trailing newline,其實就是行的分隔符即換行符。如...

linux sed命令,如何替換換行符「 n」

linux sed命令如何替換換行符n 實現方法 第一種方法使用test跳轉命令實現替換換行符 branch和test區別 第二種方法使用branch跳轉命令實現替換換行符 linux sed命令,如何替換換行符 n 在一次sed使用中,執行命令 sed s n g file 發現,沒起到任何效果。...