sed命令替換分行符號

來源:互聯網
上載者:User

sed命令替換分行符號 sed流編輯器是shell中處理常值內容的一大利器。sed命令從文字資料流中讀取一行文本到模式空間中進行相應的命令、或指令碼處理,因此在處理分行符號時會有點特殊。 下面的命令可以很正確的執行: 1echo "a,b,c,d" |sed 's/,/\n/g'但是如果我想恢複回來,下面的命令卻沒有效果了:1echo "a,b,c,d" |sed 's/,/\n/g'|sed 's/\n/,/g'這跟sed的行處理方式有關,sed讀取一行時,會先把分行符號去掉,處理完後再添加上,所以是無法使用上面的命令進行分行符號替換的,必須使用sed中的其它命令來完成。上面的恢複可以使用tr命令:1echo "a,b,c,d" |sed 's/,/\n/g'|tr -t '\n' ','下面是網上找到的一些用法,經實踐效果是各不相同的,只有一種是完全可行的。 1sed ':label;N;s/\n/:/;b label' filename1sed ':label;N;s/\n/:/;t label' filename上面的兩條命令可以實現將檔案中的所有分行符號替換為指定的字串,如命令中的冒號。命令的解釋::label;  這是一個標籤,用來實現跳轉處理,名字可以隨便取(label),後面的b label就是跳轉指令N;  N是sed的一個處理命令,追加文字資料流中的下一行到模式空間進行合并處理,因此是分行符號可見s/\n/:/;   s是sed的替換命令,將分行符號替換為冒號b label  或者 t label    b / t 是sed的跳轉命令,跳轉到指定的標籤處標籤跳轉和N的追加命令實現了每一行的不間斷放入模式處理空間,從而不會漏掉每一個分行符號,而沒有標籤的話跳轉的話,就只能每兩行替換掉一個分行符號,對比效果: 1$  echo "a,b,c,d" |sed 's/,/\n/g'|sed ':x;N;s/\n/,/;b x'2a,b,c,d3$  echo "a,b,c,d" |sed 's/,/\n/g'|sed 'N;s/\n/,/'4a,b5c,d還有如下的一種命令的處理效果,也是無法實現分行符號的替換。事實上$符號在sed中表示文字資料流中的最後一行,下面的處理結果我並不是很理解。1$  echo "a,b,c,d" |sed 's/,/\n/g'|sed 's/$/,/'2a,3b,4c,5d,PS:sed中的n命令和~地址表示 1sed '8,80{n;n;n;d}' filenamen表示讀取文字資料流中的下一行到模式空間(N為追加),sed還是只處理一行。上面的命令理解:從第8行起(包含),一次讀取9/10/11行,然後讀取11行後,執行d命令,就是刪除處理空間中的第11行,之後從12行開始,讀取13/14/15, 刪除15行,以此類推,直到第80行。1sed '11~4d' filename該命令實現和上一個命令同樣的功能,唯一的差別就是它直到檔案結束,而無法指定結束行。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.