"sed"가 파일 길이를 확장하지 않는 이유는 무엇입니까? [폐쇄]

"sed"가 파일 길이를 확장하지 않는 이유는 무엇입니까? [폐쇄]

다음 줄을 포함하는 파일이 제공됩니다.

 1. 1
 2. 2
 3. 3
 4. 4
 5. 5

"sed" 명령을 실행합니다:

sed -i "/4/a\text\" filename.txt

파일은 다음과 같습니다.

 1. 1
 2. 2
 3. 3
 4. text
 5. 4

이제 "5"를 나타내는 줄이 사라졌습니다.

파일의 줄 수가 변경되지 않은 것처럼 마지막 줄이 지연된 것 같습니다.

내가 실행한 명령은 "제자리에 삽입"을 의미하는 "-i" 플래그를 사용하지 않았습니다.

sed "/3/a\text\" filename.txt > temp.txt; mv temp.txt filename.txt;

그러나 "in-place" 플래그가 지정되지 않은 경우에도 동일한 효과가 나타납니다. 이것이 'sed의 의도된 기능인가요? 행을 추가할 수 있는 방법이 있나요?

답변1

텍스트 줄을 추가하려면 간단한 인용문을 사용할 수 있습니다.

예:

[root@h2g2w ~]# sed -i '/4/a\text\' toto    
[root@h2g2w ~]# cat toto                    
1                                           
2
3
4
text
5
[root@h2g2w ~]#

이것도 작동합니다... 사용 중인 sed 버전이 Gnu 버전인가요? 큰따옴표도 작동합니다(그러나 여기서 사용하는 것은 사용자 오류입니다).

[root@h2g2w ~]# sed -i "/4/a\text\ " toto
[root@h2g2w ~]# cat toto
1
2
3
4
text
text
5
[root@h2g2w ~]#

답변2

첫째, 게시한 명령을 셸에 직접 넣으면 구문 문제가 발생할 수 있습니다.

둘째, 제공한 두 명령은 궁극적으로 sed 또는 다른 명령을 통해 원본 파일 "filename.txt"를 직접 수정합니다.

짐작할 수 있듯이 첫 번째 예에서는 sed가 "-i" 스위치를 사용하여 파일을 직접 수정하도록 합니다. 두 번째 예에서는 "filename.txt"를 명령으로 덮어씁니다 mv temp.txt filename.txt.

따라서 두 예 모두에서 예상된 결과를 볼 수 있습니다.

예, sed를 사용하여 줄을 삽입할 수 있습니다.

https://stackoverflow.com/questions/6537490/insert-a-line-at-special-line-number-with-sed-or-awk

관련 정보