Jadi saya telah menggunakan 'sed' di linux untuk sementara waktu, tetapi mengalami sedikit kesulitan saat mencoba menggunakannya di OSX karena 'POSIX sed' dan 'GNU sed' memiliki begitu banyak perbedaan kecil. Saat ini saya sedang berjuang dengan cara menyisipkan baris teks setelah nomor baris tertentu. (dalam hal ini, baris 4)
Di linux saya akan melakukan sesuatu seperti ini:
sed --in-place "4 a\ mode '0755'" file.txt
Jadi di OSX saya mencoba ini:
sed -i "" "4 a\ mode '0755'" file.txt
Namun ini terus memberi saya kesalahan 'karakter tambahan setelah \ di akhir perintah'. Ada ide apa yang salah di sini? Apakah saya salah ketik? Atau apakah saya tidak memahami perbedaan lain antara versi sed?
Jawaban yang Diterima:
Sebenarnya, spesifikasi POSIX untuk sed
membutuhkan baris baru setelah a\
:
[1addr]a\ text
Tulis teks ke output standar seperti yang dijelaskan sebelumnya.
Ini membuat penulisan satu baris sedikit merepotkan, yang mungkin merupakan alasan ekstensi GNU berikut ke a
, i
, dan c
perintah:
Sebagai ekstensi GNU, jika antara
a
dan baris baru ada selain spasi-\
urutan, lalu teks baris ini, mulai dari karakter non-spasi pertama setelaha
, diambil sebagai baris pertama dari teks memblokir. (Ini memungkinkan penyederhanaan dalam membuat skrip tambahan satu baris.) Ekstensi ini juga berfungsi dengani
danc
perintah.
Jadi, agar portabel dengan sed
your Anda sintaks, Anda harus menyertakan baris baru setelah a\
bagaimanapun. Cara termudah adalah dengan menyisipkan baris baru yang dikutip:
$ sed -e 'a\
> text'
(di mana $
dan >
adalah prompt shell). Jika Anda merasa sakit, bash
[1] memiliki $' '
mengutip sintaks untuk memasukkan pelarian gaya-C, jadi gunakan saja
sed -e 'a\'$'\n''text'
[1] dan mksh (r39b+) dan beberapa shell bourne non-bash (mis., /bin/sh di FreeBSD 9+)