sed格式化excel的換行符
今天,朋友給我發來一段文字,他想讓下面文字的第2,3行合併為一行,第4,5行合併為一行。
"id,name"
"abcd,d",",b,c,d
df"
"121,3","張三,
zhangsan"
他這個文字本來是excel的csv格式,但csv的資料在linux上以文字方式開啟後,原來在excel一個單元格里的資料可能會分兩行顯示。如上面的"b,c,ddf"本來是在excel的一個單元格里面的,但你看在linux 以文字開啟後,就顯示成了兩行。
我說那你用excel開啟處理一下啊。他說資料太大,用excel打不開,問能不能在linux透過工具給處理一下。
我也在網上搜尋了一下,最終用sed的N功能實現,對於sed我還是有了解的,但對於sed的N功能我也是第一次知道(看來sed和awk可我還有很多東西不知道的)。
原文字如下:
[root@node1 ~]# cat test
"id,name"
"abcd,d",",b,c,d
df"
"121,3","張三,
zhangsan"
利用sed的N+替換s功能得以實現:
[root@node1 ~]# sed '/[^"]$/{N;s/\n//}' test
"id,name"
"abcd,d",",b,c,ddf"
"121,3","張三,zhangsan
解釋:
/[^"]$/ 這個是在sed裡面運用了正規表示式。
[^"]表示引號"除外。
[^"]$表示引號"結尾的行除外。$是以什麼結尾。
N表示把當前行和下一行合併。
\n是換行符的意思。
sed '/[^"]$/{N;s/\n//}' test 的解釋就是在test文字中,將不是以引號"結尾的行和它的下一行合併成一行。
好了,相信你看了上面的解釋,一定明白了這個命令列的意思了。
為了更好的解釋sed的N功能,我們做以下幾個實驗,以加深理解。
[root@node1 ~]# cat test
"id,name"
"abcd,d",",b,c,d
df"
"121,3","張三,
zhangsan"
[root@node1 ~]# sed '$!N;s/\n/ /' test
"id,name" "abcd,d",",b,c,d
df" "121,3","張三,
zhangsan"
注:$是最後一行,!是不配匹的意思,N的意思就是把下一行追加到當前行尾。
$!N連起來的意思也就是一直向下N,直到最後一行不N。
下面詳細說一下N命令:
如果沒有下一行:
自動輸出模式空間的內容(-n會阻止該輸出),立即結束整個指令碼。
如果有下一行:
在模式空間的內容後追加換行符(\n 0x0A),然後讀入下一行追加到換行符之後。
控制傳遞給後續命令。如果有下一行,N後模式空間的內容應該是“模式空間原來的內容\n當前行的內容"。
我們再看下面的例子。
例子1:
[root@node1 ~]# sed 'N;s/\n/ /' test
"id,name" "abcd,d",",b,c,d
df" "121,3","張三,
zhangsan"
看到用$!N;s/\n/ /和N;s/\n/ /輸入的結果一樣。
例子2:
[root@node1 ~]# cat test
"id,name"
"abcd,d",",b,c,d
df"
"121,3","張三,
zhangsan"
[root@node1 ~]# sed '3N;s/\n/ /' test
"id,name"
"abcd,d",",b,c,d
df" "121,3","張三,
zhangsan"
上面的3N表示只合並第三行和第四行,其他行不合並。
好了,今天就到這了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-1484111/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sed 取消檔案中的換行符
- linux_sed替換特殊符號Linux符號
- excel換行Excel
- 【換行符】Windows、Unix、Mac不同作業系統的回車符 和換行符 WindowsMac作業系統
- Linux 轉換換行符Linux
- **PHP中替換換行符PHP
- excel表裡分隔符替換為製表符的操作方法Excel
- 換行符處理
- 替換SQL欄位中的換行符,回車符,空格等特殊符號SQL符號
- Awk和Sed格式化Hive的資料Hive
- excel一個框裡怎麼換行 excel表格的文字怎麼換行Excel
- oracle中去掉文字中的換行符、回車符、製表符Oracle
- sed 字串替換字串
- oracle 回車、換行符Oracle
- &符號在sed命令中使用符號
- gvim中換行符(Enter鍵)的操作
- HTML換行符和水平線HTML
- oracle中去掉文字中的換行符、回車符、製表符小結Oracle
- 自動換行excel裡面哪個鍵 excel換行按什麼鍵Excel
- js將文字框的內容回車換行符轉換為<br/>換行JS
- linux下的製表符和換行Linux
- 解析PHP處理換行符的問題PHP
- c#換行符及空格符(轉義字元)C#字元
- 使用sed做特殊的行列轉換
- Excel-單元格內換行Excel
- excel表格中文字換行Excel
- Java 檔案換行符識別與轉換Java
- GitHub 第一坑:換行符自動轉換Github
- CHARINDEX、表中有製表符、換行符、回車符的查詢和取消掉的方法Index
- handlebars.js 用 <br>替換掉 內容的換行符JS
- Bash技巧:把變數賦值為換行符,判斷檔案是否以換行符結尾變數賦值
- excel如何設定自動換行?Excel
- git 多平臺統一換行符Git
- PhpWord 如何輸出換行符到 word?PHP
- sed處理變數替換變數
- grep sed 大批次替換字串字串
- Git中的AutoCRLF與SafeCRLF換行符問題Git
- 利用符號進行的型別轉換,轉換成數字型別 ~~符號型別