sed '5i\n\n\n' myfile은 첫 번째 \n을 리터럴 n으로 삽입하고 나머지 두 개는 새 줄로 삽입합니다. 3개의 새 줄을 모두 삽입할 수 있습니까? [복사]

sed '5i\n\n\n' myfile은 첫 번째 \n을 리터럴 n으로 삽입하고 나머지 두 개는 새 줄로 삽입합니다. 3개의 새 줄을 모두 삽입할 수 있습니까? [복사]

저는 Bash 스크립트를 작성 중인데 GNU sed를 사용하여 파일에 줄을 삽입할 때 첫 번째 새 줄은 리터럴 n으로 삽입되고 나머지는 새 줄로 삽입됩니다. 명령은 다음과 같습니다.

sed '5i\n\n\n' myfile

출력은 다음과 같습니다:

n


표시된 대로 출력의 첫 번째 줄에는 포함되어서는 안되는 "n"이 포함되어 있습니다. 이 동작에서 무엇을 놓치고 있습니까? sed가 '\n'을 사용하여 새 줄만 삽입하도록 할 수 있습니까? 감사해요.

답변1

이것표준 sed인서트

5i\
text here...

(백슬래시 포함) GNU sed는확장command 와 같은 줄에 있는 텍스트를 허용 i하지만 그 뒤에 백슬래시가 있으면 i평소와 같이 명령을 종료하는 것으로 해석됩니다. 하지만 여전히 새 줄로 이동하도록 강요하지는 않습니다. 당신은 그것을 사용할 수 있습니다

5i\\n\n\n

함께하세요. 이는 이스케이프된 백슬래시가 아니라 바로 옆에 있는 두 가지 다른 유형의 백슬래시입니다. 이 동작은 문서화되지 않은 것으로 보이지만 명령과 버전 간에 일관됩니다.


다른 GNU 확장을 사용하면 더 명확해질 수 있습니다.

sed -e '5i\' -e '\n\n\n'

-e모호함을 피하기 위해 명령과 텍스트는 두 개의 인수로 분리됩니다 .

관련 정보