Bagaimana cara memasukkan teks setelah string tertentu dalam file?

69

Saat ini saya menggunakan echo "Hello World" >> file.txtuntuk menambahkan beberapa teks ke file tetapi saya juga perlu menambahkan teks di bawah string tertentu katakanlah "[opsi]", apakah mungkin dengan sed?

MISALNYA:

Masukkan file

Some text
Random
[option]
Some stuff

Berkas keluaran

Some text
Random
[option]
*inserted text*
Some stuff
Javier Villanueva
sumber
1
Anda harus lebih spesifik dan memberikan beberapa contoh teks kepada orang-orang untuk membantu Anda dengan perintah yang tepat.
clement
harap edit Q Anda dan tunjukkan garis input- outputgarisnya. Karena Anda Q tidak jelas. Anda juga bisa melakukannya echo "Hello World [option]" >> file.txt, tetapi itu tidak masuk akal.
Saya mengedit pertanyaan untuk memberikan lebih banyak informasi untuk referensi tetapi jawaban yang diterima adalah apa yang saya coba capai
Javier Villanueva
Jika Anda hanya ingin mengedit file konfigurasi, ini adalah solusi terbaik yang saya temukan: unix.stackexchange.com/a/78076/20661
rubo77

Jawaban:

104

Tambahkan baris setelah pertandingan

  • sed '/\[option\]/a Hello World' input

Masukkan baris sebelum pertandingan

  • sed '/\[option\]/i Hello World' input

Selain itu Anda dapat mengambil cadangan dan mengedit file input di tempat menggunakan -i.bkpopsi untuk sed

Rahul Patil
sumber
2
di osx saya dapatkansed: 1: "/pattern/a some text here": command a expects \ followed by text
the_prole
untuk Mac OSX, saya perlu menambahkan \ <<NEWLINE>>setelah aopsi
Tom Howard
Kode di atas akan menambahkan / menyisipkan baris untuk setiap pertandingan. Jika Anda ingin menambahkan / menyisipkan baris untuk pertandingan pertama saja, Anda dapat menambahkan 0,ke perintah: sed '0,/\[option\]/a Hello World' inputataused '0,/\[option\]/i Hello World' input
kimbaudi
33

Ya, itu mungkin dengan sed:

sed '/pattern/a some text here' filename

Sebuah contoh:

$ cat test
foo
bar
option
baz
$ sed '/option/a insert text here' test
foo
bar
option
insert text here
baz
$
devnull
sumber
2
@ jviervd Saya tidak yakin apa yang Anda maksud dengan jawaban pertama? Jika yang Anda maksudkan pada saat dijawab, maka Anda salah. Anda tidak memperhatikan cap waktu dengan cermat!
devnull
Apakah ada cara untuk menambahkannya setelah string terbaru cocok? Sebagai contoh: foo bar option bar option baz . Jadi polanya jadi foo bar option bar option addedstring baz ?
Ari
4

Dengan awk:

awk '1;/PATTERN/{ print "add one line"; print "\\and one more"}' infile

Perlu diingat bahwa beberapa karakter tidak dapat dimasukkan secara harfiah sehingga kita harus menggunakan urutan melarikan diri (mereka mulai dengan backslash) misalnya untuk mencetak backslash literal yang harus ditulis \\.

Ini sebenarnya sama dengan sedtetapi di samping itu setiap baris baru yang disematkan dalam teks harus didahului oleh garis miring terbalik:

sed '/PATTERN/a\
add one line\
\\and one more' infile

Untuk detail lebih lanjut tentang urutan melarikan diri, lihat manual.

don_crissti
sumber
Baris awk sebenarnya tidak mengubah teks, hanya output.
Josef Klimuk