作者 主題: sed 取代換行字元  (閱讀 15991 次)

0 會員 與 1 訪客 正在閱讀本文。

casa

  • 懷疑的國中生
  • **
  • 文章數: 41
    • 檢視個人資料
sed 取代換行字元
« 於: 2009-09-10 14:12 »
請問一下,我有一個文字檔,內容舉例為
1
2
3
4
我想用 sed 將這個檔案輸出為
1,2,3,4

也就是說,要用 sed 將 \n 換成 ,
我知道可以用 tr 最快
tr  '\n'  ','

但是,有可能用 sed 達成嗎?

謝謝!

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
回覆: sed 取代換行字元
« 回覆 #1 於: 2009-09-10 19:34 »
我是來幫妳推文的啦
之前也有想過 sed 這問題,但找不到方式 ...

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
回覆: sed 取代換行字元
« 回覆 #2 於: 2009-09-11 00:09 »

代碼: [選擇]
sed -e :x -e '$!N;s/\n/,/;tx'
I am kenduest - 小州

my website: http://kenduest.sayya.org/

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
回覆: sed 取代換行字元
« 回覆 #3 於: 2009-09-11 19:27 »
代碼: [選擇]
sed -e :x -e '$!N;s/\n/,/;tx'

多謝學長指點

只是還沒完全了解,其中..
$!N 是什麼意思呢 ??


代碼: [選擇]
sed -e :x -e '$!N;s/\n/,/;tx'
=
sed -e :ABC -e '$!N;s/\n/,/;tABC'
google 說是像 basic 的標記一樣
但為何
代碼: [選擇]
# echo '1
2
3
4
5
6' | sed -e :yy -e '$!N;s/\n/,/'
1,2
3,4
5,6
兩行兩行的呈現呢 ?


kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
回覆: sed 取代換行字元
« 回覆 #4 於: 2009-09-11 20:38 »
先改成這樣好:

代碼: [選擇]
sed -e :x -e 'N; s/\n/,/; tx'
有無比較簡單?

N 表示把資料讀入附加進來,所以...

代碼: [選擇]
1
2

用該程式碼:

代碼: [選擇]
sed -e 'N ; s/\n/,/'
內部結構為:

代碼: [選擇]
1<換行字元>2
所以用 s/\n/,/ 方式取代成為:

代碼: [選擇]
1,2
但是這個指令會一次處理兩個,所以檔案內容如下時候:

代碼: [選擇]
1
2
3
4

會成為:

代碼: [選擇]
1,2  <-- 第1行資料
3,4  <-- 第2行資料
5,6  <-- 第3行資料

所以改用 label 提供重複呼叫使用:

代碼: [選擇]
sed -e :x -e 'N; s/\n/,/; tx'
其中 label 為 x,x 就是提供 s/\n/,/ 的功能,然後 t 表示執行進入該 x 這個 label 動作直到沒東西可以處理為止。
« 上次編輯: 2009-09-12 15:53 由 kenduest »
I am kenduest - 小州

my website: http://kenduest.sayya.org/