web-dev-qa-db-ja.com

複数のファイル内のテキストを検索して置換

リンクされたチュートリアルのNotepad ++のように、複数のファイルで特定のテキストを見つけて置き換える方法を知りたい。

例: http://cybernetnews.com/find-replace-multiple-files/

83
Faruk Uzun

ここでは、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" {} \;
135
user8290

ストリームエディターsedは、この種の作業の強力なユーティリティであり、最初の選択肢ですが、Ubuntuベースのネイティブアプリケーションを使用して通常のテキストエディターからこれを行う場合は、Jeditをご覧になることをお勧めします。 、リポジトリで利用可能であり、コンソールに入力することでインストールできます。

Sudo apt-get install jedit

Jeditを起動し、検索メニュー項目をクリックして、メニューリストで[ディレクトリで検索]項目をクリックすると、以下のダイアログが表示されます。

Jedit Search In Folder Dialog

これはNotepad ++のそれに似ており、同じことをします。私はこれがあなたが望むものであると信じています。

27
Sabacon

別のGUIオプションは regexxer :です。 regexxer screenshot

19
int_ua
Perl -pi -e 's/oldtext/newtext/g' *

現在のフォルダー内のすべてのファイルで発生したoldtextをnewtextに置き換えます。ただし、バックスラッシュを使用して、oldtextおよびnewtext内のすべてのPerl特殊文字をエスケープする必要があります。

13
Michael K

Geany で確認してください。これはLinuxに最適なNPPの代替品です。それを正確に行うことができ、さらに正規表現を使用できます。

9
Stefano Mtangoo

私はこのことのためにちょっとしたスクリプトを書きました。基本のみが必要で、sedなどに詳しくない場合は、こちらをご覧ください: http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and -reset-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
3
recluze
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"

fedoraで動作します

2
user328359

このスクリプトを使用してコードをコピーし、ファイルを作成することができます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
2
dimitrios

非常に簡単な解決策:フォルダー*.txt内のすべてのstring_1ファイルをstring_2に置き換えます:

sed -i 's/string_1/string_2/g' *.txt
2
Helmut P.

別のプログラムは Searchmonkey です。

SearchMonkeyは、面倒なfind/grepを、一致するテキストの位置と量を示すマークアップをすばやく提供する滑らかなユーザーインターフェイスに置き換えることを目的とした軽量のGtkアプリケーションです。目標は、エンドユーザーだけでなくソフトウェア開発者にも使いやすくアクセス可能な検索ツールを提供することです。

2
vrcmr