Saya perlu menambahkan tag PHP yang mengelilingi file. Sangat mudah untuk menambahkannya menggunakan mereka
find . -exec echo "?>" >> '{}' \;
tetapi bagaimana saya bisa menambahkan tag <?php
?
Saya perlu menambahkan tag PHP yang mengelilingi file. Sangat mudah untuk menambahkannya menggunakan mereka
find . -exec echo "?>" >> '{}' \;
tetapi bagaimana saya bisa menambahkan tag <?php
?
Jawaban:
sed -i "1s/^/<?php /" file
(Ini -i
untuk edit di tempat.)
Versi lebih portabel:
ed file <<!
1s/^/<?php /
wq
!
sed
, dan memungkinkan menambahkan suffix cadangan.
-i
tidak portabel, sintaks berbeda antara implementasi, dan merusak symlink. Anda akan lebih baik menggunakan aplikasi yang sebenarnya dirancang untuk mengedit file.
Saya belum dapat meninggalkan komentar, tetapi untuk melakukan semuanya dalam satu langkah:
find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;
Anda dapat melakukannya dengan perl one-liner:
perl -0777 -p -i -e "s/^/hey /g" testfile
The -0777
pasukan file menyeruput modus, sehingga seluruh file dibaca sebagai satu baris. -p
memungkinkan perulangan. -i
memungkinkan pengeditan di tempat file. ^
menunjukkan awal suatu garis.
$ cp testfile1 testfile; perl -0777 -p -i -e "s/^/hey /g" testfile; diff testfile testfile1
1c1
< hey asdf
---
> asdf
Pembaruan: Seperti yang ditunjukkan dalam komentar, Anda dapat memilih untuk membuat cadangan secara otomatis dengan menggunakan -i.bak
alih-alih -i
. Ini memberikan keamanan tambahan jika terjadi kesalahan pada perintah Anda. Argumen untuk -i
menjadi akhiran cadangan.
Saat memperbarui banyak file, Anda dapat menjalankan perintah dengan -i.backup${RANDOM}
, periksa apakah semua file diperbarui dengan benar, lalu hapus semua file dengan ekstensi itu.
-i
bendera tanpa akhiran, harap peringatkan pembaca bahwa ini berarti Anda tidak memiliki cadangan . Untuk beberapa karakter lebih banyak ( -i.bak
), Anda mendapatkan cadangan jika one-liner Anda termasuk salah ketik. Salah ketik yang cukup sederhana (misalnya, lupa -p
bendera) dapat merusak sepanjang hari Anda sebaliknya.
sed
untuk mengedit aliran - file bukan aliran. Gunakan program yang dimaksudkan untuk tujuan ini, seperti ed
atau ex
. The -i
pilihan untuk sed
tidak hanya tidak portabel, itu juga akan merusak setiap symlink Anda mungkin mengalami, karena pada dasarnya menghapus dan recreates itu, yang sia-sia.
for file in foo bar baz; do
ed -s "${file}" << EOF
0a
<?php
.
w
EOF
done
ed
untuk tujuan itu, tunjukkan ini dalam jawaban Anda.
Alternatif dari apa yang Anda tulis untuk menambahkan sesuatu ke akhir setiap file di direktori (dalam bash
):
for FNAME in *
do
echo "?>" >> $FNAME
done
meskipun saya suka find
one-liner Anda :)
$FNAME
harus $fname
- berdasarkan konvensi, kami mengkapitalisasi variabel lingkungan (PAGER, EDITOR, SHELL, ...) dan variabel shell internal (BASH_VERSION, RANDOM, ...). Semua nama variabel lainnya harus mengandung setidaknya satu huruf kecil. Konvensi ini menghindari variabel lingkungan dan internal yang secara tidak sengaja diabaikan.
Ada cara sederhana
echo "startstr$(cat filename)endstring" > filename.new