リンクされたチュートリアルのNotepad ++のように、複数のファイルで特定のテキストを見つけて置き換える方法を知りたい。
リンクされたチュートリアルのNotepad ++のように、複数のファイルで特定のテキストを見つけて置き換える方法を知りたい。
回答:
ここでは、sedを使用して、ディレクトリ/ home / user / directory /にある拡張子cを持つすべてのファイルで、「cybernetnews」という単語をすべて「cybernet」に置き換えます。
find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
実行ディレクトリから再帰的に検索し、通常の読み取り可能、書き込み可能なファイルのみを操作する、より一般的なバリエーション:
find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
cyber net news
ますか?これをどのように変換できcyber net
ますか?
ストリームエディターsedは、この種の作業の強力なユーティリティであり、最初の選択肢ですが、Ubuntuベースのネイティブアプリケーションを使用して通常のテキストエディターからこれを行う場合は、Jeditをご覧になることをお勧めします。 、リポジトリで利用可能で、コンソールに入力することでインストールできます。
sudo apt-get install jedit
jeditを起動し、検索メニュー項目をクリックして、メニューリストで[ディレクトリで検索]項目をクリックすると、以下のダイアログが表示されます。
これはNotepad ++のそれに似ており、同じことをします。これがあなたが望むものだと思います。
sed
。
Geanyで確認してください。これは、Linuxに最適なNPP代替品です。それを正確に行うことができ、さらに正規表現を使用できます。
私はこのことのためにちょっとしたスクリプトを書きました。基本のみが必要で、sedなどに詳しくない場合は、http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and-replace-inをご覧ください。 -a-set-of-files /
スクリプトは次のとおりです。
for f in submit_*;
do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
mv a_$f $f ;
done
このスクリプトを使用して、コードをコピーし、ファイルを作成できますfind_and_replace_in_files.sh
。
少し変更しました。ご意見をお聞かせください。
# *****************************************************************************************
# 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
別のプログラムはSearchmonkeyです。
SearchMonkeyは、面倒なfind / grepを、一致するテキストの位置と量を示すマークアップをすばやく提供する滑らかなユーザーインターフェイスに置き換えることを目的とした軽量のGtkアプリケーションです。目標は、エンドユーザーやソフトウェア開発者に、使いやすくアクセス可能な検索ツールを提供することです。
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"
フェドラで私のために働く
sed
インスタンスははるかに少なくなります!そのため、CPU時間の点ではるかに高速です。ファイルのアクセス時間は制限されるため、クロック時間はそれほど速くないと思いますが、システムの負荷は低くなります。注xargs
は、単一のsed
コマンドのコマンドラインにファイル名のhunderedsなどをたくさん配置します-パスの長さに基づいて利用可能なバッファサイズを埋めます。
+
の代わり\;
にfind
、右?
xargs
が、あなたは正しい。From man find
:-exec command {} +
:... The command line is built in much the same way that xargs...
。私はのコマンドラインを思わせるgit filter-branch
...;)