Dalam pengeditan
ini Stéphane Chazelas POSIXifies (lagi)sed
format saya dengan memasukkan -e
istirahat xpression dan -e
pernyataan 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
-e
xpressions 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 untuksed
naskah\n
istirahat ewline dalamsed
pernyataan command-line ... Aku memang kabur tentang mengapakurung kurawal dalam suatu
sed
{
fungsi}
harus didahului dengan\n
jeda baris seperti yang dinyatakan di sini:- Ini
<right-brace>
harus didahului oleh a<newline>
dan dapat didahului atau diikuti oleh<blank>
karakter.
- Ini
sebuah
\n
istirahat 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 b
pernyataan peternakan yang ia alamatkan dalam editnya - atau mungkin keduanya sekaligus - tetapi saya tidak tahu dan ingin melakukannya. Jika hanya satu b
pernyataan peternakan, maka saya yakin suatu d
akan 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 sed
perintah kedua juga POSIXified .
sed
sangat 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 -e
bisa bertahan dalam kasus itu - setidaknya itu berlaku untuk saya. Namun saya belum tersandung pada sed
yang tidak menafsirkan mereka cukup dipertukarkan sekalipun.
;
sebelum baris baru - baris baru baik-baik saja. Jujur, Anda bisa melakukannya tanpa -e
dan semuanya sepenuhnya dan hanya menulis file seperti #!/bin/sed
dengan 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 b
atau t
atau menutup }
curlies untuk fungsi, atau r
benar-benar menyebalkan dan w
ritual 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).