Jadi, saya punya banyak file di direktori, dan saya harus memasukkan satu baris teks ke masing-masing. Mereka pada dasarnya memiliki format berikut:
<VirtualHost *:80>
ServerAdmin gabe@localhost
DocumentRoot /var/www/test1
ServerName test1.local
ServerAlias test1
<Directory "/var/www/test1">
Options All
AllowOverride All
</Directory>
</VirtualHost>
Dan saya ingin memasukkan garis sebelum penutupan
</VirtualHost>menandai. Asumsi pertama saya adalah bahwa saya harus dapat melakukan ini dengan sed, mungkin mencocokkan dan mengganti tag itu. Saya akan mulai mencoba ini sekarang, tetapi jika ada yang punya cara untuk melakukan ini, saya ingin mendengarnya.
text-processing
sed
gabe
sumber
sumber
Jawaban:
Sesuatu seperti ini:
bekerja. Jika Anda ingin mengulangi perintah ini pada banyak file, Anda dapat melakukan sesuatu seperti:
Mungkin lebih baik (tetapi belum teruji) berkat @ChrisDown:
sumber
/
untuk ekspresi sed lebih bersih, karena Anda tidak harus melarikan diri dari tebasan:'s:</VirtualHost>:yourlinehere\n</VirtualHost>:'
Jika Anda tidak keberatan Perl coba:
The
-i
switch akan menyimpan file lama Anda dengan.old
ekstensi dan cetak dengan yang sekarang.sumber
Anda juga dapat menggunakan "ex" (baris perintah vi) jika pengeditan yang ingin Anda lakukan bahkan agak rumit. Misalnya, Anda hanya ingin melakukan penyisipan untuk satu contoh "".
Script shell seperti ini dapat bekerja:
Pendekatan ini memberi Anda keuntungan "ex": menemukan lokasi dengan pola elaboarte, dan 'gerakan kursor'. Anda dapat melakukan hal-hal seperti menemukan pola, kemudian menemukan contoh berikutnya, MAKA lakukan penyisipan. Atau Anda dapat mengubah teks, bukan hanya melakukan sisipan. Atau Anda dapat mengubah antar rentang. Jangan lupa bahwa "mantan" memungkinkan Anda menggunakan "." sebagai baris saat ini, maka., / ^ somepatter / s / blah / foo / akan bekerja.
sumber
Anda dapat menggunakan kode baris tunggal berikut untuk menyisipkan satu baris atau beberapa baris ke lokasi yang diberikan dalam file, dalam kasus Anda sebelum 'VirtualHost'. Kode ini pada dasarnya mencari nama file (bisa jadi *. *, Jika Anda ingin memasukkan teks di semua file) dalam direktori yang diberikan dan sub-direktori. Dalam file yang ditemukan, ia mencari pola 'VirtualHost'. Setelah ditemukan polanya, ia menggantinya dengan firstline \ nsecondline \ notherlines \ n \ VirtualHost. Perhatikan bahwa 'VirtualHost' adalah bagian dari teks untuk penggantian, kalau tidak kita akan kehilangan itu.
sumber