再帰的にテキストファイルで単語を検索して置換する

再帰的にテキストファイルで単語を検索して置換する

このフォルダ内には、多くのテキストファイルを含むフォルダツリーがあります。これらのファイルには、同じ名前 "log.txt"と同じ形式があります。たとえば、各ファイルに次のような複数行を表示できます。

date
name
. 
.
.

findコマンドを使用してこのフォルダツリーですべてのテキストファイル「log.txt」を見つけて、各テキストファイルで「date」という単語を「dating」という単語に置き換えるにはどうすればよいですか。

答え1

現在ツリーのルートにあるとします(そうでない場合は、「.」をディレクトリ名に置き換えます)。 「log.txt」を「*.txt」または必要に応じて置き換えることができます。

find . -type f -name 'log.txt' -exec sed -i 's/date/dating/g' {} \;

答え2

ディレクトリルートでおよびを使用できますfindsed

find . -type f -name 'log.txt' -exec sed -i 's/^date$/dating/' {} +
  • find . -type f -name 'log.txt'log.txtすべてのファイルを再帰的に検索します。

  • -exec述語では、findファイルの1行に置き換えsed -i 's/^date$/dating/' {} +られます。datedating

関連情報