Bergantung pada prasyaratnya, bahwa semua benda Anda dikelompokkan dan tidak digabungkan menjadi kelompok yang lebih besar, berikut ini cara melakukannya. (Saya menggunakan kucing dalam contoh, karena anjing tidak tersedia).
Di kanan bawah Anda melihat kucing yang disorot, objek id 5358, yang merupakan jalur tunggal, jadi saya menambahkan lantai hijau kemudian yang mengubahnya menjadi objek 5364 yang akan terjadi kemudian, jadi jangan biarkan membingungkan Anda. :)
Anda mendapatkan editor xml dengan menekan tombol 4 dari kanan (panah 1).
Saya mengubah g5358 ke g-cat-5358 (bidang 4) untuk memudahkan texttool untuk memilih objek-objek ini yang berfungsi untuk sebagian besar elemen yang tidak bertabrakan dengan nama-nama xml-svg (warna, meta, id, ... ).
Di jendela kiri Anda lihat, bahwa sudah ada entitas berganti nama, g-cat-5312 dekat ke atas pada tingkat indentasi yang sama.
Inkscape mengatur id unik untuk grup, tetapi mereka tidak harus berbentuk gNUMBER, Anda dapat mencampur karakter lain. Hanya saja, jangan memilih pengidentifikasi yang sudah ada.
Setelah mengubah pengidentifikasi, tekan 'setzen (set)' (5) untuk mengonfirmasi perubahan Anda. Anda melihat antarmuka Jerman di sini, YMMV.
Simpan svg (sebagai demo-cats.svg). Kami sekarang beralih ke scripting.
for cat in $( grep g-cat- demo-cats.svg )
do
id=${cat//[^0-9]/}
echo $id
(head -n 53 demo-cats.svg; sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg; echo "</svg>" ) > cat-${id}.svg
done
Apa fungsinya? Itu greps (cari dengan grep) untuk pola "g-cat-" yang merupakan awal dari bagian menarik kami.
id=${cat//[^0-9]/}
ekstrak id di bash dari ekspresi. Echo mencetaknya ke layar yang seharusnya membantu menemukan bug jika terjadi kesalahan. head -n 53 demo-cats.svg mengambil 53 baris pertama dari svg, yang berisi semua svg-boilerplate. Tergantung pada pengaturan Anda dengan berbagai svg-format (inkscape, terkompresi, normal svg, inkscape-terkompresi) ini mungkin berbeda. Dengan nl demo-cats.svg | less
Anda bisa n umerate yang l ines, untuk menemukan titik pemotongan yang tepat dalam kasus Anda.
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
^ Hingga bagian ini, garis harus dimasukkan.
Perintah berikutnya dilakukan dengan s tream ed itor sed: sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;
kata (-n) tidak ada pencetakan (tapi) searche untuk kelompok kucing, hingga tag penutup g pada lekukan level 2 yang merupakan 4 ruang sebelum </g>
jika Anda tidak ubah preferensi Inkscape, yang mungkin Anda ingat jika Anda melakukannya. Kemudian tambahkan tag penutup untuk svg: echo "</svg>"
. Tulis hasilnya ke file 'cat- $ id.svg' (ini menimpa file yang ada secara diam-diam).
Jadi saya berakhir dengan dua file: cat-5312.svg dan cat-5364.svg.
Solusi yang lebih elegan harus dimungkinkan dengan xmlstarlet atau alat serupa, yang dibuat untuk mencari dan mengedit file xml. Sayangnya saya tidak terbiasa dan tidak berhasil setelah membaca 10 menit dokumentasi. Anda tidak perlu mengganti nama grup di awal.