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, after 2.00, CCCCafter 3.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.

관련 정보