用SEDreplaceLineFeed \ x0a

我必须在日志文件中删除大量的换行符(hex\ 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 | hexdump -C

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

但是,如果我想删除'\ x0a'它不工作:

sed -r's / \ x0a // g'hexprob.txt | hexdump -C

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

你知道该怎么办? 我只是不知道为什么我不能像任何其他hex值一样的replace或删除它?

非常感谢! Fake4d

sed工具是面向行的。 一行被读取并放入模式空间(模式空间不包含\ n)。 sed动作被应用到模式空间,然后线被写出来,并附有\ n。 这就是为什么它没有达到你所期望的。

如果你想删除文件中的所有新行,那么你可以这样做

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

这有效地遍历文件读取行并将它们附加到模式空间,直到最后一行到达整个模式空间被删除\ n的时候。

  • :a创build一个标签。
  • N读入模板空间的下一行
  • $! 如果不是最后一行ba分支到一个
  • s // n //将greplace为\ n的所有内容。

根据您的文件大小,这可能无法正常工作,因为可能会限制模式空间的大小。 使用tr来执行此操作通常更具可移植性

 tr -d '\n' <file