GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan grep dan sed untuk mencari dan mengganti string

Anda dapat menggunakan find dan -exec langsung ke sed daripada pertama-tama menemukan oldstr dengan grep . Ini mungkin sedikit kurang efisien, tapi itu mungkin tidak penting. Dengan cara ini, sed penggantian dijalankan atas semua file yang terdaftar oleh find , tetapi jika oldstr tidak ada itu jelas tidak akan beroperasi di atasnya.

find /path -type f -exec sed -i 's/oldstr/newstr/g' {} \;

Solusi Anda baik-baik saja. coba saja dengan cara ini:

files=$(grep -rl oldstr path) && echo $files | xargs sed....

jadi jalankan xargs hanya ketika grep mengembalikan 0 , mis. ketika menemukan string di beberapa file.


Saya telah mengambil ide Vlad dan mengubahnya sedikit. Alih-alih

grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' /dev/null

Yang menghasilkan

sed: couldn't edit /dev/null: not a regular file

Saya melakukan 3 koneksi berbeda ke server jarak jauh

touch deleteme
grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' ./deleteme
rm deleteme

Meskipun ini kurang elegan dan membutuhkan 2 koneksi lagi ke server (mungkin ada cara untuk melakukan semuanya dalam satu baris) ini juga berfungsi dengan efisien


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

  2. Menemukan file yang dapat dieksekusi menggunakan ls dan grep

  3. Temukan dan ganti dalam skrip shell

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

  2. Bagaimana Cara Mengganti String Dalam File?

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

  1. Uji Pencarian Dan Ganti Sed Rekursif Sebelum Menjalankan?

  2. Menggunakan 'sed' Untuk Menemukan Dan Mengganti?

  3. Contoh Manipulasi Bash String – Panjang, Substring, Temukan dan Ganti