Linux

用 SED 替換換行符 x0a

  • June 2, 2014

我必須在日誌文件中刪除大量換行符(十六進制 \x0a)。

我剛剛用 sed 解決了這個問題。我知道這有點複雜..

你知道如何解決這個問題嗎?

這是一個範例文本文件: http ://s000.tinyupload.com/index.php?file_id=05715208147126674999

hexdump -C hexprob.txt

00000000 45 0a 69 0a 6e 0a 66 0a 61 0a |Einfa|

我使用以下程式碼刪除“E”:

sed -r ’s/\x45//g’ hexprob.txt | 十六進制轉儲 -C

00000000 0a 69 0a 6e 0a 66 0a 61 0a | .infa |

但是如果我想刪除 ‘\x0a’ 它不起作用:

sed -r ’s/\x0a//g’ hexprob.txt | 十六進制轉儲 -C

00000000 45 0a 69 0a 6e 0a 66 0a 61 0a | 愛因發 |

你知道該怎麼做嗎?我只是不知道為什麼我不能像任何其他十六進制值一樣替換或刪除它?

非常感謝!Fake4d

sed 實用程序是面向行的。讀取一行並將其放入模式空間(模式空間不包含 \n)。sed 操作應用於模式空間,然後寫出該行,並附加一個 \n。這就是為什麼它沒有按照您的預期進行。

如果要刪除文件中的所有新行,則可以執行此操作

sed ':a;N;$!ba;s/\n//g' file

這有效地循環文件讀取行並將它們附加到模式空間,直到到達最後一行,當整個模式空間被執行以刪除 \n 時。

  • :a 創建一個標籤。
  • N 將下一行讀入模式空間
  • 美元!如果不是最後一行 ba 分支到 a
  • s//n//g 用任何內容替換所有 /g 出現的 \n。

根據您的文件大小,這可能不起作用,因為模式空間的大小可能會受到限制。使用tr來執行此操作通常更便攜

tr -d '\n' <file  

引用自:https://serverfault.com/questions/601208