如何将文本文件中的所有行合并为一行?

如何将文本文件中的所有行合并为一行?

我想将文本中的所有行合并为一行。我是编程新手,想边做边学。我花了四个小时尝试解决这个问题。我知道这个问题有一个简单的解决方案。以下是我一直在尝试的方法。

sed -e 'N;s/\n//' myfile.txt #不执行任何操作

sed -e :a -e N -e 's/\n/ /' -e ta myfile.txt #输出全部搞乱了,我看不懂语法

cat myfile.txt | tr -d '\n' > myfile.txt # 删除所有行

这是文本文件:

500212
262578-4-4
23200
格里菲斯实验室有限公司
格里菲斯实验室
南都柏林郡议会
办公室
办公室(工业)
列出应纳税额
2 Pineview 工业区
费豪斯路
诺克利昂
2007 年 12 月 31 日
2008 年 1 月 1 日”   

我不知道我哪里做错了……

答案1

tr就像你使用它一样应该工作起来也最简单——你只需要输出到另一个文件。如果你使用输入文件作为输出,结果就是一个空文件,正如你所观察到的;

猫myfile.txt | tr -d'\n'>单行文本

你需要记住,有些编辑器以 来结束一行\r\n。在这种情况下,使用

cat myfile | tr -d '\r\n'

答案2

简单方法

另一种方法是使用 awk,

cat myfile.txt | awk '{print}' ORS=''

输出:

500212262578-4-423200GRIFFITH LABORATORIES LTDGRIFFITH LABORATORIES南都柏林郡议会办公室办公室(工业)List Rateable2 Pineview Industrial EstateFirhouse RoadKnocklyon2007 年 12 月 31 日2008 年 1 月 1 日”

笔记:

ORS=''-> ORS(输出记录分隔符)。(即)您的字段分隔符,您可以在单引号之间使用任何字符作为字段分隔符。使用此 awk 方法,我们可以包含空格和所有字符。

希望这会有帮助!

答案3

編輯:

搜索并\n用空格“ ”替换。
您可以通过转到“搜索”->“替换”
或通过键盘快捷键Ctrl+来获取替换窗口H

请参阅下面的截图:

您的原文位于第 1-14 行。
结果位于第 16 行。

在此处输入图片描述

答案4

没有必要将标签:a放在主指令之外,也没有-e必要使用选项;最后,/$/是多余的(每一行都有一个 EOL 字符)。

改进其他答案,可以得到

sed -i ':a; N; s/\n/ /; ta' file

如果写成下面这样就更清楚了,

sed -i ':a
        N
        s/\n/ /
        ta' file

该命令的工作原理如下:

  1. N将下一行附加到已包含当前行的(多行)模式空间;
  2. s/\n/ /用空格替换\n生成的换行符;N
  3. ta转到标签后面的脚本行:a 只要步骤 2 中的替换成功IE如果发生了替换,则执行跳转到步骤 1,而不会“到达”脚本的末尾,IE 没有读取另一行输入。

请注意以下几点;

  • sed按顺序逐行读取输入文件的行,从第一行开始
  • :a只是一个标签,而不是要执行的命令;
  • N原则上可以在任何线路上执行,但是
  • s/\n/ /(原则上在任何一行执行)成功除最后一行外的任何一行, 所以
  • ta使脚本的结尾可到达仅当读取最后一行输入时(唯一s失败的一行),所以
  • 之后不再有输入行读入模式空间第一个被读入其中,除非最后一个被读入,但是没有进一步的行可读入,因此p执行隐式命令。

因此剧本基本上是这样的第一行输入并继续逐行添加以下行,每次都用空格替换换行符;之后最后一行被附加(并\n在空格中更改),N不能附加任何行,s失败,ta被跳过,到达脚本末尾,并且p在当前looong 1行模式空间上执行隐含的 rint 语句。

该选项用整个 1 行模式空间-i替换输入文件。file

相关内容