행의 데이터를 기반으로 텍스트 문서의 내용을 분할하는 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 님의 댓글을 바탕으로 작성되었습니다.