Saya ingin tahu bagaimana saya bisa menemukan dan mengganti teks tertentu dalam banyak file seperti di Notepad ++ di tutorial yang ditautkan.
misalnya: http://cybernetnews.com/find-replace-multiple-files/
Saya ingin tahu bagaimana saya bisa menemukan dan mengganti teks tertentu dalam banyak file seperti di Notepad ++ di tutorial yang ditautkan.
misalnya: http://cybernetnews.com/find-replace-multiple-files/
Jawaban:
Di sini saya menggunakan sed untuk mengganti setiap kemunculan kata "cybernetnews" dengan "cybernet" di setiap file dengan ekstensi, c, dalam direktori, / home / user / direktori /.
find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
Variasi yang lebih umum di mana Anda mencari secara rekursif dari direktori eksekusi dan hanya beroperasi pada file biasa, dapat dibaca, dan dapat ditulis:
find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
cyber net news
? Bagaimana saya bisa mengonversi ini menjadi cyber net
?
Editor aliran, sed, adalah utilitas yang kuat untuk jenis pekerjaan ini dan merupakan pilihan pertama saya, namun, jika Anda ingin melakukan ini dari editor teks biasa menggunakan aplikasi asli berbasis Ubuntu, saya sarankan Anda melihat Jedit , Ini tersedia di repositori dan dapat diinstal dengan mengetikkan konsol Anda:
sudo apt-get install jedit
Mulai jedit, klik item menu pencarian, di daftar menu, klik item Search in Directory, Anda akan disajikan dialog di bawah ini:
Ini mirip dengan Notepad ++ dan melakukan hal yang sama, saya percaya ini yang Anda inginkan.
sed
.
Opsi GUI lainnya adalah regexxer :
perl -pi -e 's/oldtext/newtext/g' *
mengganti semua kejadian oldtext dengan newtext di semua file di folder saat ini. Namun Anda harus melarikan diri dari semua karakter khusus perl dalam oldtext dan newtext menggunakan backslash.
Periksa dengan Geany , itu adalah pengganti NPP yang sempurna untuk Linux. Anda dapat melakukan hal itu plus Anda dapat menggunakan regex.
Saya menulis naskah kecil untuk hal ini. Jika Anda hanya membutuhkan dasar-dasar dan tidak terbiasa dengan sed dll, lihat di sini: http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and-replace-in -a-set-of-file /
Scriptnya adalah sebagai berikut:
for f in submit_*;
do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
mv a_$f $f ;
done
Anda dapat menggunakan skrip ini, menyalin kode, dan membuat file find_and_replace_in_files.sh
.
Saya telah memodifikasinya sedikit; tolong katakan pendapatmu.
# *****************************************************************************************
# find_and_replace_in_files.sh
# This script does a recursive, case sensitive directory search and replace of files
# To make a case insensitive search replace, use the -i switch in the grep call
# uses a startdirectory parameter so that you can run it outside of specified directory - else this script will modify itself!
# *****************************************************************************************
!/bin/bash
# **************** Change Variables Here ************
startdirectory="/your/start/directory"
searchterm="test"
replaceterm="test=ok!"
# **********************************************************
echo "***************************************************"
echo "* Search and Replace in Files Version 01-Aug-2012 *"
echo "***************************************************"
i=0;
for file in $(grep -l -R $searchterm $startdirectory)
do
cp $file $file.bak
sed -e "s/$searchterm/$replaceterm/ig" $file > tempfile.tmp
mv tempfile.tmp $file
let i++;
echo "Modified: " $file
done
echo " *** All Done! *** Modified files:" $i
Program lain adalah Searchmonkey .
SearchMonkey adalah aplikasi Gtk ringan yang bertujuan untuk menggantikan find / grep yang rumit dengan antarmuka pengguna yang apik yang dengan cepat menyediakan mark-up yang menunjukkan lokasi dan jumlah kecocokan teks. Tujuannya adalah untuk menyediakan alat pencarian yang mudah digunakan dan diakses oleh pengguna akhir, dan juga pengembang perangkat lunak.
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"
bekerja untuk saya di fedora
sed
instance jauh lebih sedikit ! Jadi ini jauh lebih cepat dalam hal waktu CPU. Karena waktu akses file akan terbatas, saya pikir itu tidak jauh lebih cepat dalam waktu jam, tetapi memberikan beban sistem yang lebih rendah. Catatan xargs
akan menempatkan banyak, seperti hundered, nama file pada baris perintah dari satu sed
perintah - mengisi ukuran buffer yang tersedia berdasarkan panjang lintasan.
+
bukan \;
di find
, kan?
xargs
, tapi Anda benar; dari man find
: -exec command {} +
: ... The command line is built in much the same way that xargs...
. Buat saya berpikir tentang baris perintah git filter-branch
...;)
Solusi yang sangat sederhana: ganti semua *.txt
file di folder string_1
dengan string_2
:
sed -i 's/string_1/string_2/g' *.txt
sed -i 's/string_1/string_2/g' $(grep -rEl 'string_1' ./)