다음 줄을 포함하는 파일이 제공됩니다.
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