Найти и заменить слова в текстовом файле рекурсивно

У меня есть дерево папок внутри этих папок, есть много текстовых файлов. Эти файлы имеют одно и то же имя «log.txt» и тот же формат. Например, внутри каждого файла мы видим несколько строк, например:

date name . . . 

Как я могу использовать команду find для поиска всех текстовых файлов «log.txt» в этих папках дерева, а затем заменить слово «дата» внутри каждого текстового файла словом «датирование»?

Предполагая, что вы находитесь в корне дерева (иначе замените «.» На имя каталога). Вы можете заменить «log.txt» на «* .txt» или что угодно.

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

Вы можете использовать find и sed из корневого каталога:

 find . -type f -name 'log.txt' -exec sed -i 's/^date$/dating/' {} + 
  • find . -type f -name 'log.txt' find . -type f -name 'log.txt' найдет все файлы log.txt рекурсивно

  • В предикате -exec find , sed -i 's/^date$/dating/' {} + заменяет date в строке файлов с dating , на месте.