특정 줄 번호에 텍스트 삽입

특정 줄 번호에 텍스트 삽입

행의 데이터를 기반으로 텍스트 문서의 내용을 분할하는 bash 스크립트를 작성 중입니다.

원본 파일의 내용이 다음과 같은 경우

01 line
01 line
02 line
02 line

bash를 사용하여 이 파일의 3번째 줄을 삽입하여 생성하려면 어떻게 해야 합니까?

01 line
01 line
text to insert
02 line
02 line

heredoc이나 비슷한 것을 사용하여 내 스크립트에서 이 작업을 수행하고 싶습니다.

#!/bin/bash

vim -e -s ./file.txt <<- HEREDOC
    :3 | startinsert | "text to insert\n"
    :update
    :quit
HEREDOC

위의 방법은 확실히 작동하지 않습니다. 하지만 이 bash 스크립트에 구현할 수 있는 제안 사항이 있습니까?

답변1

ex줄 번호를 통해 POSIX 도구를 사용할 수 있습니다.

ex a.txt <<eof
3 insert
Sunday
.
xit
eof

또는 문자열 일치:

ex a.txt <<eof
/Monday/ insert
Sunday
.
xit
eof

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html

답변2

sed전통적인 선택이 될 것입니다(GNU sed는 이보다 더 간단한 형식을 가질 수 있습니다).

$ cat input
01 line
01 line
02 line
02 line
$ sed '2a\
text to insert
' < input
01 line
01 line
text to insert
02 line
02 line
$ 

또는 매우 전통적입니다 ed(보너스! 내부 편집, 이식 불가능한 sed -i양식 없음).

$ (echo 2; echo a; echo text to insert; echo .; echo wq) | ed input
32
01 line
47
$ cat input
01 line
01 line
text to insert
02 line
02 line
$ 

(이것과는 아무 관련이 없습니다 bash.)

답변3

$ awk 'NR==3{print "text to insert"}1' a.txt
01 line
01 line
text to insert
02 line
02 line

답변4

다음을 시도해 보십시오:

당신의 원본 파일

$ cat <<'EOF' > file.txt
01 line
01 line
02 line
02 line
EOF

구분 기호를 사용하여 3행에 삽입합니다.

$ cat <<'EOF' | sed -i "3r /dev/stdin" file.txt
text to insert
EOF

당신은 이 결과를 얻습니다

$ cat file.txt
01 line
01 line
text to insert
02 line
02 line

고쳐 쓰다: @Kusalananda 님의 댓글을 바탕으로 작성되었습니다.

관련 정보