Bağlantılı öğreticideki Notepad ++ gibi birden çok dosyada belirli bir metni nasıl bulabileceğimi ve değiştirebileceğimi bilmek istiyorum.
örneğin: http://cybernetnews.com/find-replace-multiple-files/
Bağlantılı öğreticideki Notepad ++ gibi birden çok dosyada belirli bir metni nasıl bulabileceğimi ve değiştirebileceğimi bilmek istiyorum.
örneğin: http://cybernetnews.com/find-replace-multiple-files/
Yanıtlar:
Burada, "cybernetnews" kelimesinin her cümlesini "cybernet" ile değiştirmek, her dosyada, c, / home / user / directory / dizinindeki c.
find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
Tekrar tekrar yürütme dizininden aradığınız ve yalnızca normal, okunabilir, yazılabilir dosyalarda çalıştırdığınız daha genel bir varyasyon:
find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
cyber net news
? Bunu nasıl dönüştürebilirim cyber net
?
Akış editörü sed, bu tür bir çalışma için güçlü bir yardımcı programdır ve ilk tercihimdir, ancak bunu Ubuntu tabanlı bir yerel uygulama kullanarak sıradan bir metin düzenleyiciden yapmak istiyorsanız, Jedit'e bir göz atmanızı öneririm , Depolarda bulunur ve konsolunuza yazarak kurulabilir:
sudo apt-get install jedit
Jedit'i başlatın, arama menüsü öğesini tıklayın, menü listesinde, Dizinde Ara öğesini tıklayın, aşağıdaki iletişim kutusuyla karşılaşacaksınız:
Bu, Notepad ++ 'ınkine benzer ve aynı şeyi yapar, istediğiniz şeyin bu olduğuna inanıyorum.
sed
.
Başka bir GUI seçeneği regexxer :
Geany ile kontrol edin , Linux için mükemmel bir NPP yerine geçer. Bunu tam olarak yapabilir, artı regex kullanabilirsiniz.
Sadece bu şey için küçük bir senaryo yazdım. Sadece temel bilgilere ihtiyaç duyuyorsanız ve sed etc ile aşina değilseniz, buraya bakın: http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and-replace-in -a-set-of-files /
Komut aşağıdaki gibidir:
for f in submit_*;
do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
mv a_$f $f ;
done
Bu betiği kullanabilir, kodu kopyalayabilir ve bir dosya oluşturabilirsiniz find_and_replace_in_files.sh
.
Onu biraz değiştirdim; Lütfen bana fikrini söyle.
# *****************************************************************************************
# 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
Başka bir program Searchmonkey .
SearchMonkey, hantal bul / grep'in yerini, metin eşleşmelerini ve konumlarını gösteren hızlı bir şekilde işaretleme sağlayan kaygan bir kullanıcı arayüzü ile değiştirmeyi amaçlayan hafif bir Gtk uygulamasıdır. Amaç, son kullanıcılar ve yazılım geliştiriciler için kullanımı kolay ve erişilebilir bir arama aracı sağlamaktır.
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"
fedorada benim için çalışıyor
sed
örnek çalıştırır ! Bu yüzden CPU zamanı açısından çok daha hızlı. Dosyaya erişim süresi sınırlı olacağından, saatin süresinde daha hızlı olmadığını, daha düşük sistem yükü sağladığını düşünüyorum. Not xargs
, tek bir sed
komutun komut satırına dosya adları gibi birçok dosya koyacaktır - mevcut tampon boyutunu yolların uzunluğuna göre doldurun.
+
yerine \;
de find
sağ?
xargs
, ama haklısın; dan man find
: -exec command {} +
: ... The command line is built in much the same way that xargs...
. Beni git filter-branch
...;) komut satırları hakkında düşündürüyor