Я хочу знать, как я могу найти и заменить определенный текст в нескольких файлах, например, в Notepad++ в связанном руководстве.
Здесь я использую 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, выберите пункт меню поиск, в списке меню выберите пункт Поиск в каталоге, вам будет представлено диалоговое окно ниже:

Это похоже на Notepad++ и делает то же самое, я считаю, что это то, что вы хотите.
Другой вариант графического интерфейса - это редактор регулярных выражений:
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.