Jawaban:
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.
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
.
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.
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.
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
.