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 printf
dan bukan echo
atau sesuatu seperti itu ex -c COMMAND
?
Jawab: Ya.
Untuk printf
vs. echo
itu 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 ... | ex
vs. 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 ex
perintah, 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 g
perintah, harus ada baris baru di akhir, dan saya lebih suka menggunakan printf
untuk membungkus perintah daripada menyematkan baris baru dalam tanda kutip tunggal.
awk
pemisah bidang yang cerdik!