이 sed 명령을 발견했지만 그것이 무엇을 하고 있는지 전혀 모릅니다. 내부 변경 파일을 사용하고 있다는 것을 알고 있습니다 -i
. 스크립트를 사용하고 있으며 -e
스크립트는 입니다 $a\
. 하지만 이 스크립트는 무엇을 하고 있나요?
sed -i -e '$a\' filename
답변1
다른 사람들이 말했듯이,예를 들어존재하다파일 끝에 개행 문자를 추가하는 방법은 무엇입니까?, GNU sed
(및 기타 구현) 의 $a\
경우 파일 끝에 개행 문자가 없으면 파일 끝에 개행 문자를 추가합니다.
왜그것이 무엇을 하는지는 매우 명확하지 않으며 문서에서도 이에 대해 설명하지 않습니다. 하지만 소스코드를 확인해보면...
문서부터 시작해 보겠습니다. $a\
예 변형 a
, 특수 사례 활용GNU 확장:
GNU 확장으로서
a
다음 명령과텍스트-e
보다 쉬운 스크립팅을 위해 두 개의 매개변수로 분할할 수 있습니다 .$ seq 3 | sed -e '2a\' -e hello 1 2 hello 3 $ sed -e '2a\' -e "$VAR"
a
이 메소드는 sed
추가할 텍스트 큐를 사용하여 구현되며, append_queue
큐를 처리해야 할 경우이름이 사람dump_append_queue
, 첫 번째 단계는
output_missing_newline (&output_file);
필요한 경우 누락된 줄 바꿈을 추가합니다. 추가된 텍스트가~ 할 것이다현재 줄의 끝이 아닌 별도의 줄에 추가합니다. 그런 다음 대기열의 내용을 추가합니다.
를 사용하면 sed -i '$a\'
필요한 경우 누락된 줄바꿈이 추가되고 대기열이 처리됩니다. 그러나 대기열이 비어 있으므로 다른 변경 사항은 적용되지 않습니다.
답변2
마지막 줄이 없으면 마지막 줄에 개행 문자가 추가됩니다.
줄 바꿈 없이 파일 만들기
$ printf 'line1\nline2' > file
$ od -c file
0000000 l i n e 1 \n l i n e 2
0000013
sed가 무엇을 하는지 봅시다:
$ sed -i '$a\' file
$ od -c file
0000000 l i n e 1 \n l i n e 2 \n
0000014
다시 실행하면 어떻게 되나요? 추가할지 여부다른새로운 팀?
$ sed -i '$a\' file
$ od -c file
0000000 l i n e 1 \n l i n e 2 \n
0000014
아니요.