GNU/Linux >> Belajar Linux >  >> Linux

Sed Pada Osx Masukkan Pada Garis Tertentu?

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 setelah a , diambil sebagai baris pertama dari teks memblokir. (Ini memungkinkan penyederhanaan dalam membuat skrip tambahan satu baris.) Ekstensi ini juga berfungsi dengan i dan c 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+)


Linux
  1. Memanipulasi teks pada baris perintah dengan sed

  2. Cara Menyisipkan Teks di awal setiap baris di Vim

  3. Bagaimana Cara Menyisipkan Teks Sebelum Baris Pertama Sebuah File?

  1. Bisakah Sed Mengganti Karakter Baris Baru?

  2. Sisipkan Baris Baru Dengan Nilai yang Hilang (na)?

  3. Sed Hapus Karakter Dari Baris Baru?

  1. Hapus Baris Yang Mengandung String Tertentu Dan Baris Berikut?

  2. Apa cara yang tepat untuk memasukkan tab di sed?

  3. sed menyisipkan baris dengan spasi ke baris tertentu