Alat POSIX untuk mengedit skrip file (daripada mencetak konten yang dimodifikasi ke standar keluar) adalah ex.
printf '%s\n' 'g/^[^C]*C[^C]*$/d' x | ex file.txt
Tentu saja Anda dapat menggunakansed -i jika versi Sed Anda mendukungnya, perlu diketahui bahwa itu tidak portabel jika Anda sedang menulis skrip yang dimaksudkan untuk dijalankan pada berbagai jenis sistem.
David Foerster bertanya dalam komentar:
Apakah ada alasan mengapa Anda menggunakan printfdan bukan echoatau sesuatu seperti itu ex -c COMMAND?
Jawab: Ya.
Untuk printfvs. echoitu adalah masalah portabilitas; lihat Mengapa printf lebih baik daripada gema? Dan juga lebih mudah untuk memotong garis baru antara perintah yang digunakan printf.
Untuk printf ... | exvs. ex -c ..., ini masalah penanganan kesalahan. Untuk perintah khusus ini tidak masalah, tetapi secara umum itu penting; misalnya, coba pakai
ex -c '%s/this pattern is not in the file/replacement text/g | x' filename
dalam naskah. Kontras dengan yang berikut ini:
printf '%s\n' '%s/no matching lines/replacement/g' x | ex file
Yang pertama akan hang dan menunggu input; yang kedua akan keluar ketika EOF diterima oleh experintah, sehingga skrip akan berlanjut. Ada beberapa solusi alternatif, seperti s///e, tetapi tidak ditentukan oleh POSIX. Saya lebih suka menggunakan formulir portabel, yang ditunjukkan di atas.
Untuk gperintah, harus ada baris baru di akhir, dan saya lebih suka menggunakan printfuntuk membungkus perintah daripada menyematkan baris baru dalam tanda kutip tunggal.
awkpemisah bidang yang cerdik!