在一次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 發現,沒起到任何效果。...