GNU/Linux >> Belajar Linux >  >> Linux

Pencarian dan penggantian rekursif dalam file teks di Mac dan Linux

Untuk mac, pendekatan yang lebih mirip adalah ini:

find . -name '*.txt' -print0 | xargs -0 sed -i "" "s/form/forms/g"

Sebagai solusi alternatif, saya menggunakan yang ini di Mac OSX 10.7.5

grep -ilr 'old-word' * | xargs [email protected] sed -i '' 's/old-word/new-word/g' @

Penghargaan diberikan kepada:jawaban Todd Cesere


OS X menggunakan campuran alat BSD dan GNU, jadi sebaiknya selalu periksa dokumentasinya (walaupun saya memilikinya less bahkan tidak sesuai dengan halaman manual OS X):

https://web.archive.org/web/20170808213955/https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sed.1.html

sed mengambil argumen setelah -i sebagai ekstensi untuk cadangan. Berikan string kosong (-i '' ) tanpa cadangan.

Berikut ini yang harus dilakukan:

find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +

-type f hanyalah praktik yang baik; sed akan mengeluh jika Anda memberikannya direktori atau lebih.

-exec lebih disukai daripada xargs; Anda tidak perlu repot dengan -print0 atau apa pun.

{} + pada akhirnya berarti find akan menambahkan semua hasil sebagai argumen ke satu instance dari perintah yang dipanggil, alih-alih menjalankannya kembali untuk setiap hasil. (Satu pengecualian adalah ketika jumlah maksimal argumen baris perintah yang diizinkan oleh OS dilanggar; dalam hal ini find akan menjalankan lebih dari satu instance.)

Jika Anda mendapatkan kesalahan seperti "urutan byte tidak valid", mungkin membantu untuk memaksa lokal standar dengan menambahkan LC_ALL=C di awal perintah, seperti:

LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +


Linux
  1. Uji Pencarian Dan Ganti Sed Rekursif Sebelum Menjalankan?

  2. Gunakan Temukan dan Temukan untuk mencari file di Linux

  3. Linux Hapus File dan Direktori

  1. temukan teks yang cocok dan ganti baris berikutnya

  2. Temukan dan ganti teks dalam file di antara rentang baris menggunakan sed

  3. Seagate Momentus XT merusak file (Linux dan Mac)

  1. Menggunakan sed untuk menemukan dan mengganti file teks di Linux

  2. Menggunakan perintah Sed,ex &Perl untuk menemukan dan mengganti teks di Linux

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