Katakanlah saya memiliki blok teks di ~/.bashrc
:
#~/.bashrc
# ...some commands...
# aliases
alias suicide='sudo rm -rf /'
# end aliases
# other commands
Saya ingin mengganti blok teks itu dengan beberapa teks lain yang terkandung di antara dua penanda di file lain: stuff-to-place-in-bashrc.txt
# stuff-to-place-in-bashrc.txt
# ...stuff...
# aliases
alias ldir='ls * -d'
alias ithinklifeisworthliving='echo all good'
# end aliases
# ...more stuff...
Saya sudah mencoba
sed -ne 's/# aliases\s+\(.*\)\s+# end aliases/\1/' stuff-to-place-in-bashrc.txt
Tapi aku benar-benar berayun dalam gelap di sini. Bisakah seseorang membantu saya?
Bagaimana cara mengekstrak teks dari
stuff-to-place-in-bashrc.txt
?Bagaimana cara mengganti bagian lain
~/.bashrc
dengan teks yang diekstraksi dari pertanyaan 1?
Edit
Terima kasih untuk pembaruan kawan-kawan, mereka yang bertanya-tanya mengapa saya menginginkan sesuatu seperti ini:
memungkinkan pembaruan yang dipilih cherry ke file skrip tanpa menimpa penambahan buatan pengguna. berguna untuk lingkungan operasi standar bersama dan sering diperbarui (seperti pekerjaan terakhir saya di Tyro yang dikodekan dengan XP).
menjadi orang gila.
sumber
# aliases
dan# end aliases
), dan itu bisa bekerja untuk Anda.Jawaban:
Ed adalah editor standar, karena Anda dapat menggunakannya untuk mengembangkan skrip ed dan membiarkannya melakukan tugasnya, seperti yang Anda uji sebelumnya, secara interaktif. Untuk file kecil seperti
.bashrc
atau teks kode apa pun, ed adalah performan karena ed membaca seluruh file dalam satu rush dan bekerja dengan buffer. Untuk alasan yang sama Anda tidak boleh menggunakan ed untuk file besar seperti file log.Tetapi dengan skrip ed, pekerjaan Anda selesai dalam waktu singkat:
Saya menggunakan skrip serupa untuk secara otomatis menyetel file konfigurasi, seperti juga .asoundrc untuk berbagai lingkungan tempat saya membawa laptop saya.
Dokumen terbaik tentang ed datang sebagai halaman manual sederhana dari sistem PLAN9 yang sangat keren . Saya menerjemahkannya ke dokumen postscript ed.ps. Jika Anda tertarik pada PLAN9, Anda harus memeriksa 9front dan http://cat-v.org/ karena versi lab lonceng asli masih dipertahankan tetapi memiliki sistem file yang sangat sederhana.
Kata terakhir tentang perang editor, emacs, vim dan sejenisnya: acme rules!
sumber
w
,q
)/^# aliases
, dan/^# end aliases/
), dan perintah lainnya adalah Vi / Ed. Lihat, misalnya, vimhelp.appspot.com/cmdline.txt.html#%3 Atur untuk+, /^# end aliases/
.info Ed
di sistem Anda (mudah-mudahan). Saya tidak tahu mengapa distribusi linux modern tidak menginstal editor keren ini. w dan q adalah perintah tulis dan berhenti. Dan ed bekerja sangat mirip dengan sed dengan regex. Ada alasan mengapa nama-nama itu terdengar sama. d berarti menghapus garis-garis yang ditekankan, -r membaca ke baris sebelumnya hasil dari!
perintah yang mengikuti. Saya mempersingkat nama file pada hasil edit, karena saya malas mengetik pagi ini.Jika Anda ingin mengedit file di tempat
ed
adalah solusi yang sangat bagus. Jika Anda ingin mengeditnya dalam-aliran, gunakansed
. Hindarised -i
.sumber
Tentu, Anda bisa melakukan ini
ed
sendirian, tidak perlu alat tambahan:jika Anda puas dengan hasilnya, ganti
,p
denganw /home/username/.bashrc
untuk menulis perubahan~/.bashrc
(perhatikan jalur lengkap yang digunakan denganr
danw
; Anda dapat menggunakan.bashrc
jika itu ada dicwd
).Cara kerjanya: pertama-tama kita
d
menghapus garis yang tidak dibutuhkan daristuff_to_place.txt
. Lalu kami menghapus yang tersisa (alias) dengan,d
. Buffer teks sekarang kosong sedangkan cut buffer berisi baris yang kita inginkan. Kami kemudianr
ead konten.bashrc
ke dalam buffer teks, menempatkan konten cut buffer (x
) ke setelah/# aliases/
baris, duplikat baris terakhir yang ditempelkan (.t.
) kemudian hapus dari baris yang digandakan hingga tetapi tidak termasuk/# end aliases/
dan akhirnyap
bajak atauw
ritus perubahan danq
uit.sumber