Bagaimana saya bisa menambahkan tag ke awal beberapa file?


Jawaban:


18
sed -i "1s/^/<?php /" file

(Ini -iuntuk edit di tempat.)

Versi lebih portabel:

ed file <<!
1s/^/<?php /
wq
!

bagus - yang sedikit lebih mudah dari apa yang saya tentang untuk menggambarkan :)
— warren

Saya perlu menambahkan ekstensi ke argumen -i di sini. Apakah Anda menggunakan sed atau GNU sed?

Richard: Yang saya gunakan mengklaim sebagai GNU sed, dan memungkinkan menambahkan suffix cadangan.
— grawity

2
Saya menggunakan BSD sed, dan memungkinkan pengeditan di tempat, tapi saya perlu memberikan ekstensi. yaitu 'sed -i .bak "POLA" file'

3
-itidak portabel, sintaks berbeda antara implementasi, dan merusak symlink. Anda akan lebih baik menggunakan aplikasi yang sebenarnya dirancang untuk mengedit file.
— Chris Down

5

Anda bisa menggunakan AWKfilter seperti ini,

awk '{if (NR == 1) printf "% s% s", "PREFIX", $ 0; lain cetak $ 0} 'testfile> newfile

Di mana PREFIXstring awalan php Anda.


5

Saya belum dapat meninggalkan komentar, tetapi untuk melakukan semuanya dalam satu langkah:

find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;

Menyukainya, menyelamatkan saya berjam-jam.
— Steve Hill

5

Anda dapat melakukannya dengan perl one-liner:

perl -0777 -p -i -e "s/^/hey /g" testfile

The -0777pasukan file menyeruput modus, sehingga seluruh file dibaca sebagai satu baris. -pmemungkinkan perulangan. -imemungkinkan 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.bakalih-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.


1
"Nilai 0777 akan menyebabkan Perl menyeruput seluruh file karena tidak ada byte legal dengan nilai itu" lihat sial.org/howto/perl/one-liner/#s3.5
— Chris W. Rea

1
Jika Anda merekomendasikan penggunaan -ibendera 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 -pbendera) dapat merusak sepanjang hari Anda sebaliknya.
— Telemachus

@Telemachus - Setuju. Diperbarui.

4

seduntuk mengedit aliran - file bukan aliran. Gunakan program yang dimaksudkan untuk tujuan ini, seperti edatau ex. The -ipilihan untuk sedtidak 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

Apa yang Anda sajikan adalah cara dasar untuk mengedit satu file. Ini tampaknya tidak menjawab masalah - pertanyaannya adalah tentang memodifikasi sejumlah file (meskipun mungkin tidak jelas pada pandangan pertama). Jika Anda tahu cara menggunakan eduntuk tujuan itu, tunjukkan ini dalam jawaban Anda.
— rozcietrzewiacz

@rozcietrzewiacz - Karena grawity menunjukkan metode yang sama dalam mengedit satu file (yang diterima), saya pikir itu sesuai dengan jawabannya. Either way, saya memasukkannya dalam for loop, yang seharusnya meredakan kekhawatiran Anda.
— Chris Down

0

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 findone-liner Anda :)


$FNAMEharus $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.
— Chris Down

@ Chris Down - konvensi yang saya lihat sepanjang karier saya bervariasi dengan pengaturan: huruf kecil, huruf besar, dan unta :)
— warren

Camelcase dan huruf kecil baik-baik saja. Either way, variabel yang bukan variabel lingkungan tidak boleh dalam huruf besar penuh.
— Chris Down

0

Ada cara sederhana

echo "startstr$(cat filename)endstring" > filename.new

Ini akan terputus dengan mengikuti baris baru.
— Chris Down

@ChrisDown mengekor baris baru dalam file?
— Hogan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.