แทรกข้อความที่หมายเลขบรรทัดเฉพาะ


12

ฉันกำลังทำงานกับสคริปต์ทุบตีที่จะแยกเนื้อหาของเอกสารข้อความขึ้นอยู่กับข้อมูลในบรรทัด

หากเนื้อหาของไฟล์ต้นฉบับอยู่ในแนวของ

01 line
01 line
02 line
02 line

ฉันจะแทรกลงในบรรทัดที่ 3 ของไฟล์นี้โดยใช้ bash เพื่อให้ได้ผลลัพธ์อย่างไร

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

ข้างต้นใช้งานไม่ได้ แต่มีคำแนะนำใดบ้างที่ฉันสามารถนำไปใช้กับสคริปต์ทุบตีนี้ได้


คำตอบ:


14

คุณสามารถใช้ Vim ในโหมด Ex:

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 insertโดยcat 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þë-Ø

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.