为什么 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.00
after CCCC
,然后追加到2.00
after CCCC
,然后追加到3.00
after 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
。