sed -iは逆順で書いています!なぜ?

sed -iは逆順で書いています!なぜ?

sedが私のファイルを逆順に書くのはなぜですか?


old_file.txt次のデータを含むテキストファイル()を読み取る必要があります。

ファイル内容old_file.txt:

1.00
2.00
3.00

以下を含む2番目のファイルがあります。

ファイル内容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、after 2.00CCCCafter3.00に追加されるために発生しますCCCC

希望の注文を受け取るには行(n + 1)の前に挿入してください$x。しかし、以下を使用する場合、シェルループはまったく必要ありません。アル字型ファイルから直接読む:

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

関連情報