GNU/Linux >> Belajar Linux >  >> Linux

Baris perintah:cari dan ganti di semua nama file yang cocok dengan grep

Maksud Anda mencari dan mengganti string di semua file yang cocok dengan grep?

perl -p -i -e 's/oldstring/newstring/g' `grep -ril searchpattern *`

Edit

Karena ini sepertinya pertanyaan yang cukup populer, saya pikir saya akan memperbarui.

Saat ini saya kebanyakan menggunakan ack-grep karena lebih user-friendly. Jadi perintah di atas adalah:

perl -p -i -e 's/old/new/g' `ack -l searchpattern`

Untuk menangani spasi kosong dalam nama file, Anda dapat menjalankan:

ack --print0 -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'

Anda dapat melakukan lebih banyak hal dengan ack-grep . Katakanlah Anda ingin membatasi pencarian hanya untuk file HTML:

ack --print0 --html -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'

Dan jika ruang putih tidak menjadi masalah, itu bahkan lebih pendek:

perl -p -i -e 's/old/new/g' `ack -l --html searchpattern`
perl -p -i -e 's/old/new/g' `ack -f --html` # will match all html files

Tampaknya inilah yang Anda inginkan, berdasarkan contoh yang Anda berikan:

sed -i 's/foo/bar/g' *

Itu tidak rekursif (tidak akan turun ke subdirektori). Untuk solusi bagus mengganti file yang dipilih di seluruh pohon, saya akan menggunakan find:

find . -name '*.html' -print -exec sed -i.bak 's/foo/bar/g' {} \;

*.html adalah ekspresi yang harus cocok dengan file, .bak setelah -i membuat salinan dari file asli, dengan ekstensi .bak (bisa ekstensi apa pun yang Anda suka) dan g di akhir ekspresi sed memberitahu sed untuk mengganti banyak salinan pada satu baris (bukan hanya yang pertama). -print untuk menemukan adalah kemudahan untuk menunjukkan file mana yang sedang dicocokkan. Semua ini bergantung pada versi yang tepat dari alat ini di sistem Anda.


Linux
  1. Cara Menghapus File dan Direktori di Command Line Linux [Tutorial Pemula]

  2. Pencarian dan penggantian rekursif dalam file teks di Mac dan Linux

  3. Batch mengganti nama file di baris perintah dan Xargs

  1. Cara Menghapus File dan Direktori di Linux dari Command Line

  2. Cara Memisahkan Dan Menggabungkan File Dari Baris Perintah Di Linux

  3. Perintah untuk membuat daftar semua file kecuali . (titik) dan .. (titik titik)

  1. Uji Pencarian Dan Ganti Sed Rekursif Sebelum Menjalankan?

  2. Gunakan Perintah Grep Dan Cari?

  3. Cara mengganti string dalam banyak file di baris perintah linux