특정 줄 번호에 텍스트 삽입


12

줄의 데이터에 따라 텍스트 문서의 내용을 분할하는 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 스크립트에 구현할 수있는 권장 사항은 무엇입니까?


답변:


14

Ex 모드에서 Vim을 사용할 수 있습니다 :

ex -s -c '3i|hello world' -c x file.txt
  1. 3 라인 3을 선택하십시오

  2. i 텍스트와 개행 삽입

  3. x 변경 사항이 있으면 작성하고 종료하십시오.

또는 문자열을 일치시켜 :

ex -s -c '/hello/i|world' -c x file.txt

8

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.)


2
대체 bonux 추가 echo text to insertcat file-to-insert.txt
Archemar

1
적어도 bash를 사용하면 모든 것을 대신 echo사용할 수 있습니다.printf '%s\n' 2 a 'text to insert' . wq
evilsoup

6

어때요?

head -n 2 ./file.txt > newfile.txt
echo "text to insert" >> newfile.txt
tail -n +3 ./file.txt >> newfile.txt
mv newfile.txt file.txt

1
이상하지만 흥미로운 아이디어 +1
Tyþë-Ø

4
$ awk 'NR==3{print "text to insert"}1' a.txt
01 line
01 line
text to insert
02 line
02 line
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.