Solusi lain mencampur sintaks regex. Untuk menggunakan perl / pola PCRE untuk kedua pencarian dan mengganti, dan hanya file proses pencocokan, karya ini cukup baik:
grep -rlZPi 'match1' | xargs -0r perl -pi -e 's/match2/replace/gi;'
di mana match1
dan match2
biasanya identik tetapi match1
dapat disederhanakan untuk menghapus fitur yang lebih canggih yang hanya relevan dengan substitusi, misalnya menangkap grup.
Terjemahan: grep
secara rekursif dan daftar file yang cocok dengan pola PCRE ini, dipisahkan oleh nul untuk melindungi karakter khusus apa pun dalam namafile, lalu pipa nama file xargs
yang mengharapkan daftar yang dipisahkan nul, tetapi tidak akan melakukan apa pun jika tidak ada nama yang diterima, dan perl
untuk mengganti garis tempat pertandingan ditemukan.
Tambahkan I
sakelar grep
untuk mengabaikan file biner. Untuk case-sensitive matching, drop i
beralih dari grep
, dan i
bendera yang melekat pada ekspresi substitusi, tetapi tidak dengan i
mengaktifkan perl
itu sendiri.