Я хочу знать, как я могу найти и заменить определенный текст в нескольких файлах, как в Notepad++ в связанном учебник.
например: http://cybernetnews.com/find-replace-multiple-files/
Здесь я могу использовать sed для замены каждого вхождения слова "и cybernetnews" и с "компания" в каждый файл с расширением, С, в каталог /главная/пользователя/каталог/.
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" {} \;
Поток редактор,СЭД, - это мощный инструмент для такого рода работы и является моим первым выбором, однако, если вы хотите сделать из обычного текстового редактора, используя Ubuntu на основе нативного приложения, я хотел бы предложить вам взглянуть на для jedit, он доступен в репозитории и его можно установить, введя в консоли:
sudo apt-get install jedit
Старт для jedit, выберите пункт меню поиск, в списке меню, нажмите на поиск в элемент каталога, вам будет представлен диалог ниже:
Этот похож на Notepad++ и делает то же самое, я считаю, что это то, что вы хотите.
perl -pi -e 's/oldtext/newtext/g' *
заменяет все вхождения oldtext на новый текст во всех файлах в текущей папке. Однако вам придется защитить все специальные символы Perl в oldtext и текст с использованием косой черты.
Проверьте с Он, это идеальная замена АЭС для Linux. Вы можете делать то, что плюс вы можете использовать regex.
Я написал небольшой скрипт для всего этого. Если вам нужны только основы и не знакомы с технологией самошифрования и т. д, посмотри здесь: 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
done
echo " *** All Done! *** Modified files:" $i
Другая программа Searchmonkey.
SearchMonkey это легкий вес приложение GTK, который призван заменить громоздкую найти/команда grep с гладкой пользовательский интерфейс, который быстро обеспечивает разметки с указанием места и количества текста играм. Цель состоит в том, чтобы обеспечить простой в использовании и доступный инструмент поиска для конечных пользователей, так и разработчиков программного обеспечения.
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"
у меня работает на Fedora
Очень простое решение: заменить во всех *.тхт файлы в папке
string_1с
string_2`:
sed -i 's/string_1/string_2/g' *.txt