合并文件的两行

问题描述 投票:0回答:1

我正在尝试以将第 10 行合并到第 9 行的方式修改文件。例如我的文件如下所示:

a
b
c
d
e
f
g
h
this is line nine
and this is line ten
i
j

我想要一个像这样的新文件:

a
b
c
d
e
f
g
h
this is line nine and this is line ten
i
j

如何合并文件的两个特定行?另外,由于文件有大量行,是否可以避免读取整个文件?

我尝试使用

echo $(cat filename)
但它似乎不起作用,而且它还会修改整个文件,而不仅仅是第 9 行和第 10 行。

bash
1个回答
2
投票

您正在寻找这样的东西:

sed '9{N;s/\n/ /}' file

sed
是一个用于文本操作的流编辑器,它对输入文件的每一行执行一系列命令。它有两个内存块的知识。 pattern space 就是其中之一,默认情况下打印在命令序列的末尾。这是它的工作原理:

  1. 开始:将当前行加载到模式空间中
  2. 9{...}
    :
    这意味着大括号内的两个命令将仅应用于第 9 行。
  3. N
    此命令将下一行输入追加到当前模式空间。该行前面带有换行符。
  4. s/\n/ /
    此命令将模式空间中的第一个换行符
    \n
    替换为空格。
  5. 结束:打印图案空间
© www.soinside.com 2019 - 2024. All rights reserved.