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

62

Я хочу знать, как я могу найти и заменить определенный текст в нескольких файлах, например, в Notepad ++ в связанном учебнике.

например: Ссылка

    
задан Faruk Uzun 30.11.2011 в 14:58
источник

10 ответов

110

Здесь я использую sed для замены каждого появления слова «cybernetnews» на «cybernet» в каждом файле с расширением c, в каталоге, / home / user / directory /.

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" {} \;
    
ответ дан user8290 30.11.2011 в 15:15
источник
25

Редактор потока sed - это мощная утилита для такого рода работ, и это мой первый выбор, однако, если вы хотите сделать это из обычного текстового редактора, используя собственное приложение на основе Ubuntu, я бы предложил вам взять посмотрите на Jedit, он доступен в репозиториях и может быть установлен путем ввода в консоль:

sudo apt-get install jedit

Запустите jedit, щелкните элемент меню поиска, в списке меню, щелкните элемент «Поиск в каталоге», вам будет представлено диалоговое окно ниже:

Это похоже на работу Notepad ++ и делает то же самое, я считаю, что это то, что вы хотите.

    
ответ дан Sabacon 30.11.2011 в 16:57
16

Другой параметр GUI - regexxer :

    
ответ дан int_ua 30.11.2011 в 18:26
9
perl -pi -e 's/oldtext/newtext/g' *

заменяет любое появление старого текста на newtext во всех файлах текущей папки. Однако вам придется избегать всех специальных символов perl в рамках старого текста и нового текста, используя обратную косую черту.

    
ответ дан Michael K 30.11.2011 в 15:11
9

Обратитесь к Geany , это отличная замена АЭС для Linux. Вы можете сделать именно это, плюс вы можете использовать регулярное выражение.

    
ответ дан Stefano Mtangoo 30.11.2011 в 15:35
3

Я написал небольшой скрипт только для этой цели. Если вам нужны только основы и не знакомы с sed и т. Д., Посмотрите здесь: Ссылка

Сценарий выглядит следующим образом:

for f in submit_*;
  do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
  mv a_$f $f ;
done
    
ответ дан recluze 02.12.2011 в 03:09
2

Вы можете использовать этот скрипт, скопировать код и сделать файл 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
    
ответ дан dimitrios 01.08.2012 в 17:36
2

Другая программа Searchmonkey .

  

SearchMonkey - это легкое приложение Gtk, которое предназначено для замены громоздкого find / grep с гладким пользовательским интерфейсом, который быстро обеспечивает разметку, показывающую местоположения и количество текстовых совпадений. Целью является предоставление простого в использовании и доступного инструмента поиска для конечных пользователей и разработчиков программного обеспечения.

    
ответ дан vrcmr 14.09.2012 в 23:44
1

Очень простое решение: замените все *.txt файлов в папке string_1 с string_2 :

sed -i 's/string_1/string_2/g' *.txt
    
ответ дан Helmut P. 25.04.2015 в 13:01
0
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"

работает для меня на Fedora

    
ответ дан user328359 19.09.2014 в 02:22