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

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

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

Здесь я использую 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" {} \;

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

sudo apt-get install jedit

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

Jedit Search In Folder Dialog

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

Другой вариант графического интерфейса - это редактор регулярных выражений:regexxer screenshot

perl -pi -e 's/oldtext/newtext/g' *

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

Проверьте с Джини, это идеальная замена НПП для Linux. Вы можете сделать именно это, плюс вы можете использовать регулярное выражение.

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

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

Я написал небольшой сценарий именно для этой вещи. Если вам нужны только основы и вы не знакомы с 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

Вы можете использовать этот скрипт, скопировать код и создать файл 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    doneecho " *** All Done! *** Modified files:" $i
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"

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

Другая программа - это Поисковый ключ.

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

У него не будет графического интерфейса, но я бы настоятельно рекомендовал вам изучить sed (man sed). Это потоковый редактор, который существует с самого начала существования UNIX.