sed -i 正在以相反的顺序写入!为什么?

sed -i 正在以相反的顺序写入!为什么?

为什么 sed 以相反的顺序写入我的文件?


我需要读取old_file.txt包含以下数据的文本文件 ( ):

文件中有什么old_file.txt

1.00
2.00
3.00

我有第二个文件,其中包含:

文件中有什么new_file.txt

AAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG

现在,我需要将光标移动到nth文件的行new_file.txt,并插入 中的所有内容old_file.txt,如下所示:

我需要的:

AAAA
BBBB
CCCC
1.00  <-- 
2.00  <-- 
3.00  <--
DDDD
EEEE
FFFF
GGGG

但我得到:

我得到什么:

AAAA
BBBB
CCCC
3.00  <--
2.00  <--
1.00  <--
DDDD
EEEE
FFFF
GGGG

这是我的代码:

#!/bin/bash

line=3 # line that I need (exemple)

while read x 

    do
        sed -i "${line}a\ $x" new_file.txt

    done < old_file.txt

我不知道为什么写作会发生相反的顺序!

答案1

发生这种情况是因为您的循环追加到1.00after CCCC,然后追加到2.00after CCCC,然后追加到3.00after CCCC

要获得您想要的订单,您可以在第 (n+1) 行之前插入$x- 但是如果您使用,则根本不需要 shell 循环r直接从文件中读取:

sed -i "${line}"'r old_file.txt' new_file.txt

答案2

替代方案,不带 sed。

#!/bin/bash

line=3
{ head -${line} new_file.txt ; cat old_file.txt; tail +$((line+1)) new_file.txt ; } 

换句话说,将$line的前几行复制new_file到输出,然后将 的整个行复制到old_file,然后将 , 的其余行new_file复制到输出line+1

相关内容