Dalam pengeditan
ini Stéphane Chazelas POSIXifies (lagi)sed format saya dengan memasukkan -eistirahat xpression dan -epernyataan xpression lain . Sekarang, saya mungkin hanya bertanya kepadanya mengapa dalam komentar, saya kira, tetapi sudah revisi nomor 18 pada jawaban itu dan hampir semua yang sebelumnya sudah berkat freebies serupa (jika Anda dapat melihat komentar yang dihapus Anda akan tahu apa Maksud saya) . Juga, saya pikir saya cukup dekat untuk memahami mengapa mengucapkan ini dengan cara yang mungkin lebih bermanfaat secara umum. Jadi, inilah harapan ...
Saya biasanya lebih suka menjaga total sed -expressions saya menjadi satu jika saya bisa, tetapi saya juga memiliki preferensi yang lebih besar untuk menyesuaikan dengan spesifikasi sedekat mungkin, terutama ketika perbedaannya tidak lebih dari a <space>dan a -e. Tetapi saya tidak dapat melakukan ini jika saya tidak mengerti mengapa saya harus melakukannya. Berikut ini ikhtisar singkat dari pemahaman saya saat ini:
yang
' -e 'istirahat portable dapat berdiri di untuksednaskah\nistirahat ewline dalamsedpernyataan command-line ... Aku memang kabur tentang mengapakurung kurawal dalam suatu
sed{fungsi}harus didahului dengan\njeda baris seperti yang dinyatakan di sini:- Ini
<right-brace>harus didahului oleh a<newline>dan dapat didahului atau diikuti oleh<blank>karakter.
- Ini
sebuah
\nistirahat ewline juga sama diperlukan berikut setiap penggunaan ...a,b,c,i,r,t,w, atau:.
Tapi saya tidak mengerti dengan jelas bagaimana definisi {fungsi }berhubungan dengan !operator yang tidak. Satu-satunya penyebutan yang saya temukan dari operator negasi di negara bagian spesifikasi:
- Fungsi dapat didahului oleh satu atau lebih
!karakter, dalam hal ini fungsi tersebut akan diterapkan jika alamat tidak memilih ruang pola.
Apakah ini berarti bahwa penggunaan kawat gigi !menyiratkan ? Bagaimana dengan perintah - haruskah mereka juga dipisahkan oleh istirahat? Apakah ini yang dialamatkan ketika Stéphane baru-baru ini MEMPIPTAKAN jawaban saya?{}$!' -e '
Saya pikir itu adalah !operator negasi, atau itu adalah bpernyataan peternakan yang ia alamatkan dalam editnya - atau mungkin keduanya sekaligus - tetapi saya tidak tahu dan ingin melakukannya. Jika hanya satu bpernyataan peternakan, maka saya yakin suatu dakan lakukan di tempat dan menghilangkan kebutuhan untuk ' -e 'istirahat, tapi aku lebih suka menjadi tertentu sebelum hazarding sebuah tiga kali POSIXified jawaban. Bisakah kamu menolong?
Saya melakukan mengambil risiko itu setelah semua , tapi tidak dengan pasti besar ...
:bagiannya - Anda menyetir pulang beberapa bulan yang lalu. Tapi saya tidak sepenuhnya mengerti mengapa sedperintah kedua juga POSIXified .
sedsangat tidak jelas bagi saya. Saya telah meminta klarifikasi beberapa kali di masa lalu, tetapi saya rasa itu tidak diperbarui. Tes yang baik adalah dengan mencoba dengan heirloom toolchest (Solaris one, berasal dari aslinya dan yang menjadi dasar spesifikasi POSIX).
s///ubstitutions khusus untuk menerima rantai dengan ; . itu menjadi kabur di sekitar perintah yang harus dibatasi dengan baris baru dan bagaimana -ebisa bertahan dalam kasus itu - setidaknya itu berlaku untuk saya. Namun saya belum tersandung pada sedyang tidak menafsirkan mereka cukup dipertukarkan sekalipun.
;sebelum baris baru - baris baru baik-baik saja. Jujur, Anda bisa melakukannya tanpa -edan semuanya sepenuhnya dan hanya menulis file seperti #!/bin/seddengan setiap perintah pada baris baru - atau orang-orang yang tidak memerlukan pembatas seperti itu malah dipisahkan ;. Orang-orang yang melakukan memerlukan baris biasanya orang-orang yang mengambil input sewenang-wenang - :nama label dan perintah yang merujuk kepada mereka seperti batau tatau menutup }curlies untuk fungsi, atau rbenar-benar menyebalkan dan writual yang mengambil args nama file. Mereka semua perlu diikuti \n.
b;n;:b, Anda bercabang ke label yang disebut";n;:b"sed historis dan POSIX (dan sed GNU tidak dalam hal itu).