Saya telah melihat-lihat sed
perintah untuk menambahkan teks ke file di baris tertentu. Ini berfungsi menambahkan teks setelah baris 1:
sed '1 a\
Tapi saya ingin menambahkannya sebelum baris 1. Yaitu:
sed '0 a\
tapi saya mendapatkan error ini: invalid usage of line address 0
.
Ada saran?
text-processing
command-line
sed
Manolo
sumber
sumber
Jawaban:
Gunakan opsi
sed
sisipkan (i
) yang akan menyisipkan teks pada baris sebelumnya.Pertanyaan pembaruan penulis:
Untuk membuatnya mengedit file di tempat - dengan GNU
sed
- saya harus menambahkan-i
opsi:Juga sintaks
Untuk non-GNU sed
Anda harus menekan tombol kembali segera setelah garis miring terbalik
1i\
dan setelahfirst_line_text
:Perhatikan juga bahwa beberapa
sed
implementasi non-GNU (misalnya yang ada di macOS) memerlukan argumen untuk-i
flag (gunakan-i ''
untuk mendapatkan efek yang sama seperti dengan GNUsed
).sumber
-i
opsi. Saya akan memperbarui jawaban Anda sebelum menerima.sed '1 i\this text is entered above the existing first line' file
bekerja untuk saya.sed (GNU sed) 4.2.2
hanyased '1 i text to insert' -i file
bekerja seperti pesona. Terima kasihawk
jawaban peringkat saya yang buruk di bawah ini. Ini seharusnya bekerja.Echo digunakan untuk mendapatkan teks. Nama file Cat - mencetak file di konsol dan> menggunakannya untuk mengirim ke nama file lain1 dan kemudian kami memindahkan namafile1 ke namafile untuk memasukkan teks ke baris pertama dari file yang diinginkan.
sumber
Anda dapat menggunakan Vim dalam mode Ex:
1
pilih baris pertamai
masukkan teks dan baris barux
Simpan dan tutupsumber
Anda ingin memasukkan teks sebelum baris pertama daripada menambahkannya setelah itu, jadi gunakan
Dokumen di sini juga dapat membantu:
sumber
Menggunakan GNU awk> = 4.1:
Berlawanan dengan semua
sed
jawaban, ini juga berfungsi pada file kosong.sumber
inplace
adalah perpustakaan, dan sayangnya itu muncul di semua distribusi awk kirimkan. Saya mendapatkan "awk: fatal: tidak dapat membuka file sumber 'inplace' untuk membaca"GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.1, GNU MP 6.1.2)
Jika Anda tidak menentukan
-i
opsi, itu tidak akan menampilkan kesalahan, dan menampilkan output pada terminal standar, tetapi tidak memasukkan teks ke dalam file.sumber
-i
saklar.gnu sed
spesifik dan kebetulan yanggnu sed
akan menerimai
tanpa backslash). Jika orang lain berpikir ini menjamin jawaban yang terpisah + jawaban ... oh well.The
0a
perintah Anda berusaha tidak bekerja diex
, pendahulu kevi
:The
printf
perintah dengan sendirinya output:Cara
0a
menambahkan setelah baris 0 (yaitu sebelum baris pertama).Baris berikutnya atau beberapa baris adalah teks literal yang akan ditambahkan.
Pada
.
baris dengan sendirinya mengakhiri perintah "append".The
x
penyebab Ex untuk menyimpan perubahan ke file dan keluar.sumber
Saya terkejut bahwa dalam pertanyaan lama ini tidak ada yang menunjukkan perintah sed yang paling umum (dan cukup sederhana dalam hal ini):
Yang bekerja di sebagian besar shell dan portabel untuk beberapa versi sed.
Jika GNU sed tersedia, Anda dapat menggunakan ini:
Perbedaannya adalah bahwa sed GNU memungkinkan penggunaan a
\n
untuk baris baru dan yang lain membutuhkan baris baru secara literal yang didahului oleh garis miring terbalik (yang juga tetap berfungsi pada GNU sed).Jika shell yang menerima
$'…'
sintaks sedang digunakan, Anda dapat menyisipkan baris baru secara langsung, jadi lihatlah bahwa baris baru sudah ada di sana:Yang berfungsi untuk lebih banyak versi sed.
sumber
Sayangnya, semua jawaban di atas (sebagian besar dengan
sed
) tidak berhasil karena saya semua mengganti baris pertama. Saya menggunakanUbuntu 16.04 LTS
mesin. Berikut adalah solusi sayaGNU Awk 4.0.2
:sumber
sed
jawaban yang menggunakan penggantian tetapi tidak menggantikan baris yang ada.Pertama dan terakhir
Saya akan berasumsi bahwa siapa pun yang mencari cara memasukkan / menambahkan teks ke awal / akhir file mungkin juga perlu tahu bagaimana melakukan yang lain juga.
Penjelasan
Ini adalah
cal
output yang disalurkan ke gnu-sed
(dipanggilgsed
pada macOS diinstal melalui brew.sh ) dengan diperpanjang RegEx (-E
) dan 6 "skrip" diterapkan (-e
) dan jeda baris lolos\
untuk dibaca. Skrip 1 & 2 digunakan1i\
untuk "pada baris 1, masukkan". Skrip 5 & 6 digunakan$a\
untuk "di baris <last>, tambahkan". Saya secara vertikal menyelaraskan output teks untuk membuat kode mewakili apa yang diharapkan dalam hasilnya. Skrip 3 & 4 melakukan pergantian (yang terakhir hanya berlaku untuk "baris <last>"). Hasilnya adalah mengonversi output perintah ke JSON yang valid.keluaran
sumber
1i
untuk memasukkan teks sebelum baris pertama. Seseorang dengan pertanyaan ini harus mengekstrak bagian yang mereka butuhkan dari jawaban Anda untuk menyelesaikan masalah mereka. Pertanyaan gratis, jadi saya mengundang Anda untuk bertanya & menjawab pertanyaan Anda sendiri untuk memberikan jawaban spesifik Anda.