Menggunakan skrip shell untuk menambahkan ‘</pre>’ setelah baris terakhir dalam file besar

1

Saya memerlukan SED, atau AWK, perintah untuk menemukan baris terakhir dalam file, dan menambahkan </pre> untuk itu.

Seperti:

LINELINELINE

Perubahan ke:

LINELINELINE</pre>
Lee Ikard
sumber

Jawaban:

1

Anda juga dapat menggunakan apa yang dikenal sebagai a perintah majemuk. Itu adalah daftar perintah, yang diperlakukan shell sebagai satu perintah untuk tujuan apa pun di luar perintah majemuk.

Ya, itu agak definisi rekursif; sebuah contoh membuatnya lebih mudah untuk dipahami.

Misalnya, untuk mengelilingi file dengan <pre> dan </pre>, Anda dapat menggunakan perintah seperti:

( printf '<pre>' ; cat originalfile ; printf '</pre>' ) > newfile

Jika Anda tidak memiliki file sementara, melainkan ingin mengelilingi output dari beberapa perintah dengan sesuatu yang lain, Anda bisa menyuntikkan perintah itu daripada cat:

( printf '<pre>' ; find / -type d -print ; printf '</pre>' ) > somefile

Ini semua bekerja dengan menerapkan pengalihan ke output dari seluruh perintah majemuk, bukan hanya bagian-bagiannya.

Tentu saja, ini tidak digunakan sed atau awk seperti yang diminta, tetapi untuk tugas semacam ini, pergi ke alat-alat itu cukup banyak.

a CVn
sumber
Ini mungkin bekerja lebih baik untuk satu-lapisan dan kesederhanaan, dan fakta bahwa saya memiliki file temp akan bekerja lebih baik untuk ini. Saya akan mencobanya, dan kemudian melihat hasilnya.
Lee Ikard
Ini bekerja lebih baik, untuk kesederhanaan.
Lee Ikard
0

Bagaimana dengan ini:

echo "</pre>" >> /path/to/the/file

Atau pada awalnya agak sulit, Anda harus menggunakan file yang berbeda untuk hasilnya.

echo "<pre>" | cat - /path/to/the/file > /path/to/the/newfile

cat berarti gabungan, dan memiliki dua argumen dalam kasus ini: - berarti stdin, jadi bagian pertama dari file gabungan adalah apa pun yang disalurkan ke sana (dalam hal ini the echo ). Argumen kedua adalah file yang ingin Anda tambahkan dulu. File-file yang digabungkan kemudian di-output menjadi newfile.

Paul
sumber
Saya hanya memikirkan sesuatu seperti itu, terima kasih. Tidak tahu itu sesederhana itu.
Lee Ikard
Apakah ada cara untuk melakukan ini di awal file? Karena ini tampaknya menjadi cara yang lebih sederhana (lebih mudah dibaca) daripada menggunakan sed.
Lee Ikard
Jawaban diperbarui.
Paul
Penggunaan tidak berguna echo? :-) cat <<<'<pre>' - /path/to/the/file Tentu saja, itu menjadi lebih rumit jika Anda menginginkan lebih dari satu string baik di awal maupun di akhir.
a CVn
Itu echo bukan "tidak berguna", itu menghasilkan string. Mungkin ada cara alternatif untuk melakukan ini, tetapi tidak adanya perintah "echo" dalam metode ini akan menghasilkan kesalahan. Saya suka pendekatan Anda. Selain bentuk penggunaan yang tidak berguna printf dimana echo akan cukup :) terbalik.
Paul
0

Dengan (GNU) sed (sesuai tag pada pertanyaan):

$ sed -i -e '$a\</pre>' file.in

Ini akan menambahkan sebuah garis dengan </pre> untuk itu file.in.

Kalau tidak:

$ sed -i -e '$s@\(.*\)@\1</pre>@' file.in

Ini akan menambah </pre> ke baris terakhir di file.in.

Kusalananda
sumber