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

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

например: http://cybernetnews.com/find-replace-multiple-files/

87
задан 16 June 2014 в 01:01

10 ответов

Здесь я использую sed для замены каждого возникновения слова "cybernetnews" с "киберсетью" в каждом файле с расширением, 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" {} \;
138
ответ дан 22 November 2019 в 23:10

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

sudo apt-get install jedit

Запустите jedit, нажмите поисковый пункт меню, в списке меню, нажмите Поиск в объекте Каталога, Вам подарят диалоговое окно ниже:

Jedit Search In Folder Dialog

Это подобно тому из Блокнота ++ и делает то же самое, я полагаю, что это - то, что Вы хотите.

27
ответ дан 22 November 2019 в 23:10

Другая опция GUI является regexxer: regexxer screenshot

19
ответ дан 22 November 2019 в 23:10
perl -pi -e 's/oldtext/newtext/g' *

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

13
ответ дан 22 November 2019 в 23:10

Сверьтесь с Geany, это - идеальная замена NPP для Linux. Можно сделать точно, который плюс Вы может использовать regex.

9
ответ дан 22 November 2019 в 23:10

Я записал немного сценария для просто этой вещи. Если Вы только нуждаетесь в основах и не знакомы с 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
3
ответ дан 22 November 2019 в 23:10

Можно использовать этот сценарий, копия кодируют и делают файл 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
ответ дан 22 November 2019 в 23:10

Другой программой является Searchmonkey.

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

2
ответ дан 22 November 2019 в 23:10
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"

работы для меня на мягкой фетровой шляпе

2
ответ дан 22 November 2019 в 23:10

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

sed -i 's/string_1/string_2/g' *.txt
2
ответ дан 22 November 2019 в 23:10

Другие вопросы по тегам:

Похожие вопросы: