4 回答
TA貢獻1821條經(jīng)驗 獲得超5個贊
在GNU中使用此解決方案sed:
sed ':a;N;$!ba;s/\n/ /g' file
這將在循環(huán)中讀取整個文件,然后用空格替換換行符。
說明:
通過創(chuàng)建標(biāo)簽
:a。將當(dāng)前和下一行附加到模式空間via
N。如果我們在最后一行之前,則跳轉(zhuǎn)到創(chuàng)建的標(biāo)簽
$!ba($!意味著不要在最后一行執(zhí)行,因為應(yīng)該有一個最終換行符)。最后,替換用模式空間(即整個文件)上的空格替換每個換行符。
這是與BSD和OS X一起使用的跨平臺兼容語法sed(根據(jù)@Benjie評論):
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' file
如您所見,使用sed這個簡單的問題是有問題的。有關(guān)更簡單和適當(dāng)?shù)慕鉀Q方案,請參閱此答案。
TA貢獻1821條經(jīng)驗 獲得超6個贊
使用tr呢?
tr '\n' ' ' < input_filename
或完全刪除換行符:
tr -d '\n' < input.txt > output.txt
或者如果你有GNU版本(有很長的選項)
tr --delete '\n' < input.txt > output.txt
TA貢獻1847條經(jīng)驗 獲得超7個贊
更短的awk替代方案:
awk 1 ORS=' '
說明
awk程序由條件代碼塊組成的規(guī)則構(gòu)成,即:
condition { code-block }如果省略代碼塊,則使用默認(rèn)值:{ print $0 }。因此,它1被解釋為真實條件并且print $0對每一行執(zhí)行。
當(dāng)awk讀取輸入時,它會根據(jù)RS(記錄分隔符)的值將其拆分為記錄,默認(rèn)情況下是新行,因此awk默認(rèn)情況下會解析輸入行。拆分還涉及RS從輸入記錄中剝離。
現(xiàn)在,在打印記錄時,ORS(輸出記錄分隔符)會附加到其上,默認(rèn)值也是換行符。因此,通過更改ORS為空格,所有換行符都將更改為空格。
添加回答
舉報
