linux-notes.org
Недавно столкнулся с проблемой, мне нужно было найти определенные слова в файлах и заменить их на нужный мне текст. Немного поискав в интернете, я нашел как это сделать, по этому решил записать заметку «Поиск и замена слов в файлах linux», пригодится как мне так и другим пользователям. Это можно сделать командой find и grep с некоторыми параметрами.
Простой поиск с использованием grep:
Поиск и замена текста в файлах:
Удаление определенного символа из файлов
Нужно символы прописывать в уникоде, если правильно понял.
Как заменить слово в файлах при рекурсивном поиске Linux?
Этой строкой мы ищем во всех файлах с разрешением *.py от текущей директории строку text_1 и заменяя ее наtext_2, так же можно использовать regexp выражения.
Еще примеры
Для начала делаем поиск по фразе которая нам необходима, нам покажет все файлы и в каких строках содержится данная фраза:
или для конкретных файлов:
Выполнить замену можно еще следующим образом:
Допустим, Вам необходимо выполнить замену целой строки ( закомментировать какую либо функцию, добавив // перед самой функцией), то можно это сделать:
Экранируем спец символы и заменяем на любую другую строку, для этого:
Данная команда заменит одну строку на другую во всех файлах.
Упрощенная версия ее:
Можно удалить многострочное содержание текста который находиться, например между //###==### и //###==###
То чтобы удалить все строки кода между данными комментариями, выполните:
Я делал сканирование maldet и нашел много вредоносного кода, по этому, я удалил его так:
Как заменить всю строку на другую? Та вот так можно:
Или тоже самое, но через переменные:
-===Пример===-
Предположим, имеется файл и в нем находится:
Но по заданию, нужно чтобы было — Three.Two.One
Для этого, выполним:
PS: О долбанном SED-е я расскажу очень не скоро, он меня реально бесит и злит. Кто ее придумал, реальный сука ДЖЕДАЙ 😀
Делаем замену другим способом:
ПРИМЕЧАНИЕ! Утилиту rpl необходимо установить.
Я попозже постараюсь привести еще примеров и рассказать о утилите в своей новой статье.
Когда не удобно искать файлы в консольном режиме и есть GUI интерфейс, то можно воспользоваться утилитой regexxer.
Debian/Ubuntu/Mint:
CentOS/RedHat/Fedora:
Очень простая и хорошая утилита, я сам ею пользовался и тестировал на своей виртуальной машине на Debian.
На этом моя короткая заметка «Поиск и замена слов в файлах linux» завершена и готова к использованию.
Рекурсивная замена текста в файлах
Интересует графическая программа для масовой замены текста в большом к-ве файлов.
Желательно программа наподобие этой http://tr.infortech.ru/ только чтобы еще присутствовала функция заменить «от» и «до» было бы здорово.
Знаю что многие начнут плеваться мол через командную строку делай, я бы с радостью, но заменять нужно много и не просто слов а блоков кода в html файлах вида
var js, fjs = d.getElementsByTagName(s)[0];
js = d.createElement(s); js.id = id;
>(document, ‘script’, ‘facebook-jssdk’));*/ ———-
и заменять нужно много, потому ручками все это вводить учитывая пробелы и т.д. времени много уйдет.
Буду признателен за совет. Всем спасибо.
Знаю что многие начнут плеваться мол через командную строку делай, я бы с радостью, но заменять нужно много и не просто слов а блоков кода
Поэтому и удобнее в терминале это. Делаешь словарь (json) вида что_заменить:на_что_заменить, пишешь скрипт, который для каждой пары рекурсивно осуществляет замену в файлах с помощью find и sed.
Я новичок в этом можно поподробней как это сделать или где почитать как это можно сделать? ну или может есть готовое решение. Было бы здорово, как я понял, сделать скрипт который будет выполнять замену, и мне только подставлять в файл значение. Это будет работать для разных кодировок файлов а именно ANSI и UTF-8?
Адаптируй под свои нужды.
1. Сначала сделай бекап. 2. Чем трахаться с седом (как тебе советовали), имхо, проще на перле скрипт написать. Или уж на питоне.
Скрипт написать это пока не в моих силах, потому ищу готовое решение.
Многострочные шаблоны? Удачи.
Два чая этому товарищу
Интересно, какой смысл ТС вкладывает в слово «рекурсивная»
У тебя есть задача, в решении которой ты заинтересован. Это отличный мотиватор, причина и повод изучить что-то новое. Вот тебе перловая рыба:
При желании дальше так же элементарно наворачивается вывод прогресса, запись файла только если были изменения, замена только в файлах с определённым расширением, сохранение оригинальных версий и т. д. и т. п.
Скрипт написать это пока не в моих силах…
При таком настрое сил у тебя никогда не будет.
Спасибо. Буду пытаться
При выполнении Вашего скрипта выдает ошибку
Can’t locate Path/Tiny.pm in @INC (you may need to install the Path::Tiny module) (@INC contains: /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .) at /Users/nicolasik/Documents/reply.pl line 5.
BEGIN failed—compilation aborted at /Users/nicolasik/Documents/reply.pl line 5.
Но на сайте perl.org пишет что у меня уже есть perl
Тред не читал,шапку не читал
в вашем случае ошибка
find: -readable: unknown primary or operator
ИТ База знаний
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Популярное и похожее
15 примеров команды PING для диагностики сети
15 примеров CURL в Linux
Руководство по команде grep в Linux
Полное руководство по командам Linux
Как создавать и выбирать базы данных MySQL в Linux
Смотрим открытые порты Linux
rdiff: инкрементальное резервное копирование
Grandstream GXW4224
Еженедельный дайджест
Рекурсивно найти слово в файлах и папках Linux
Дистрибутив Linux, несмотря на версию и вид, имеет множество графических оболочек, которые позволяют искать файлы. Большинство из их них позволяют искать сами файлы, но, к сожалению, они редко позволяют искать по содержимому. А особенно рекурсивно. В статье покажем два способа того, как можно рекурсивно найти файлы, которые содержат ту или иную фразу. Поиск будет осуществлен по папкам и директориям внутри этих папок.
Найти фразу в файлах рекурсивно через консоль
Все просто. Открываем серверную консоль, подключившись по SSH. А далее, вводим команду:
Например, команда может выглядеть вот так:
Команда найдет и выведет все файлы, которые содержат фразу merionet в директории /home/user/merion и во всех директориях, внутри этой папки. Мы используем следующие ключи:
- -i — игнорировать регистра текста (большие или маленькие буквы);
- -R — рекурсивно искать файлы в сабдиректориях;
- -I — показывать названия файлов, вместо их содержимого;
Так же, вам могут быть полезны следующие ключи:
- -n — показать номер строки, в которой находится фраза;
- -w — показать место, где слово попадается;
Поиск слова через Midnight Commander
Так же, в консоли сервера, дайте команду:
Эта команда запустит Midnight Commander. Кстати, если он у вас не установлен, его можно просто установить через yum:
Открыв mc, во вкладке Command выберите Find File и заполните поисковую форму как показано ниже:
- Start at: — директория, где нужно осуществлять поиск;
- File name: — маска поиска. Например, искать только в файлах расширения txt будет — *.txt;
- Content — сама фраза;
Нажимаем OK и получаем результат:
Было полезно?
Почему?
😪 Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.
😍 Полезные IT – статьи от экспертов раз в неделю у вас в почте. Укажите свою дату рождения и мы не забудем поздравить вас.