Bagaimana cara "mencari dan mengganti" banyak file?

11

Saya menggunakan grepperintah untuk mencari string di banyak file. Apakah ada yang mirip dengan "cari dan ganti"?

Tom Brito
sumber

Jawaban:

19

Anda mencari sedperintah. Misalnya, untuk mengganti "dog" dengan "cat" di semua file teks di direktori saat ini:

sed -i 's/dog/cat/' *.txt
Jjed
sumber
1
Sederhana dan menyenangkan.
Luis Alvarado
1

sed datang ke pikiran. Contoh:

sed s/cat/dog/ <input >output

Ini mencari kucing dalam garis dan menempatkan anjing pada tempatnya di input file dan menulis ke file output.

Kerkdyk
sumber
1

sedadalah alat yang tepat; tetapi, sebagai alternatif, Anda bahkan dapat menggunakan experintah di vim:

vim -c 'args <files> | argdo %s/cat/dog/g | x'

di mana <files>daftar file atau pola di mana Anda ingin melakukan substitusi.

jcollado
sumber
0

Anda dapat menggunakan Vim dalam mode Ex:

for b in *.txt
do
  ex -sc '%s/OLD/NEW/g|x' "$b"
done
  1. % pilih semua baris

  2. s pengganti

  3. g ganti semua instance di setiap baris

  4. x Simpan dan tutup

Steven Penny
sumber