Поиск с заменой linux

Заметки Лёвика

web программирование, администрирование и всякая всячина, которая может оказаться полезной

linux — массовый поиск и замена в файлах

Поиск текста по файлам в Linux:

grep -rl ‘text’ /var/www/
— ищем файлы, в которых имеется ‘text’
grep -rl ‘text’ ./
— то же, но в текущей категории..

Поиск и удаление файлов, содержащих строку
78.46.14.162

find /var/named/ -type f -exec grep «MX» <> ; -print | grep named
(имя файла и найденный текст)

find . -name ‘*.*htm*’ -exec grep -i iframe <> ; -print | less
ищем iframe (файлы, перезаписанные вирусом).

Массовый поиск и замена в файлах:

«s/search text/replace text/g» index.php
i

— флаг, указывающий на то, что оригинальный файл будет сохранен как file.ext

g — заменяем не только первое вхождение

поиск и замена в нескольких файлах с использованием perl
perl -pi

-e ‘s/foo/bar/’ [files]

Поиск и замена с использованием sed (ищем скрипт и заменяем его на комментарий. Экранируем восклицательный знак:
sed -i.

«s/≶script>var k;.*script>/≶\!— deleted —>/g» index.php

Флаг -i (inplace) означает, что результат следует сделать в файле. При наличии символов после -i резервная копия сохраняется в соответствующий файл (некоторые системы не дают выполнить команду с флагом -i без сохранения резервной копии).
Для удобства дальнейшего удаления использую -i.

(можно -i.bak — сохранит файлы, добавляя расширение bak). Дальнейшее удаление при помощи команды find + delete
find ./ -name ‘*.

Пригодилось при замене вирусных кодов на сайте — первым этапом поиск файлов, затем — дальнейшая замена. В принципе, можно сделать всё одним махом. В случае замены флаг -i

Подсчет количества конкретных слов в файле:
http://www.linux.org.ru/forum/general/5120319

Поиск строки с указанием её номера grep -n ‘needle’ file.txt

Просмотр файла, начиная со строки 532
more +532 file.txt

Массовое переименование файлов в linux — rename регулярка (/что заменять/на что заменять/ в каких файлах)
rename «s/.JPG/.jpg/g» *.JPG
http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html

Поиск файлов по размеру

Для удаления файлов, найденных командой find достаточно указать дополнительный параметр -delete

Поиск php файлов размером 535 байт (c — указывает на размер в байтах, по умолчанию — в блоках 512)
find ./ -type f -name ‘*.php’ -size 599c
При указании размера со знаком плюс или минус — происходит поиск файлов соответственно больше или меньше указанного значения.

Поиск подстроки в недавно модифицированных файлах (40 дней назад ! минус перед числом обязателен):
find ./ -name «*.php» -mtime -40 -exec grep «breadcrumb» <> \;

Поиск файлов find + последующий grep для них (find + exec grep).. во второй строчке — ещё и удаление
find ./ -type f -name ‘*.php’ -size 599c -exec grep -l «c1120ba44a14664ed80cfa5a18832c1b9b39dec0» <> \;
find ./ -type f -size 599c -exec grep -l «c1120ba44a14664ed80cfa5a18832c1b9b39dec0» <> \; -delete
Поиск файлов больше мегабайта (+1M) меньше (-1M)
find ./ -type f -size +1M

Поиск файлов с нулевой длиной
find ./ -type f -size 0
Поиск и удаление файлов с нулевой длиной (вторым парамтером — путь к каталогу.. ./ означает текущий
find ./ -type f -size 0 -delete

Поиск номеров строк
в файле (чтобы grep вывел номер строки — используем с параметром -n)

Чтобы вытащить определённые строки из файла (или удалить строки в начале файла и в конце файла), можно использовать sed — выведет строки с 4 по 17
sed -n ‘3,10p’ file.txt

Читайте также:  После установки линукс минт нет выбора ос

Переместить файлы размером >2Mb в каталог /tmp (и вообще выполнить любую команду с файлами)
find ./ -size +2M -exec cp <> /tmp \;

Ресайз всех изображений в каталоге, размер которых превышает 2М
find ./ -size +2M -exec convert <> -resize 1200×1200 <> \;

Ресайз всех изображений, по маске
find ./ -name ‘493_*’ -exec convert <> -resize 1200×1200 <> \;

Рекурсивно удалить все .svn директории в подкаталогах
find . -name «.svn» -exec rm -rf <> \;

Метки: linux

Опубликовано Суббота, Май 29, 2010 в 23:17 в следующих категориях: Без рубрики. Вы можете подписаться на комментарии к этому сообщению через RSS 2.0. Вы можете добавить комментарий, или trackback со своего сайта.

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Комментарии (3) к записи “linux — массовый поиск и замена в файлах”

Спасибо, очень помогло. Но в Массовый поиск и замена в файлах:… пришлось заменить кавычки на фигурные скобки. Пробовал в OpenSuSE 11.4.

Разные “времена” файла
find -name “*.*” -mtime -40 -mtime +2
find -name “*.*” -ctime -40 -ctime +2

Источник

Как использовать sed для поиска и замены строки в файлах

При работе с текстовыми файлами вам часто нужно искать и заменять строки текста в одном или нескольких файлах.

sed является s Tream ред itor. Он может выполнять базовые операции с текстом над файлами и входными потоками, такими как конвейеры. С помощью sed вы можете искать, находить и заменять, вставлять и удалять слова и строки. Он поддерживает базовые и расширенные регулярные выражения, которые позволяют сопоставлять сложные шаблоны.

В этой статье мы поговорим о том, как найти и заменить строки с помощью sed . Мы также покажем вам, как выполнить рекурсивный поиск и замену.

Найти и заменить строку с помощью sed

Существует несколько версий sed с некоторыми функциональными различиями. macOS использует версию BSD, в то время как большинство дистрибутивов Linux поставляются с предустановленной по умолчанию GNU sed . Мы будем использовать версию GNU.

Общая форма поиска и замены текста с помощью sed имеет следующий вид:

  • -i — По умолчанию sed записывает свой вывод в стандартный вывод. Эта опция указывает sed редактировать файлы на месте. Если указано расширение (например, -i.bak), создается резервная копия исходного файла.
  • s — Заменяющая команда, вероятно, наиболее часто используемая команда в sed.
  • / / / — Символ-разделитель. Это может быть любой символ, но обычно используется символ косой черты ( / ).
  • SEARCH_REGEX — обычная строка или регулярное выражение для поиска.
  • REPLACEMENT — строка замены.
  • g — Флаг глобальной замены. По умолчанию sed читает файл построчно и изменяет только первое вхождение SEARCH_REGEX в строке. Если указан флаг замены, заменяются все вхождения.
  • INPUTFILE — имя файла, для которого вы хотите запустить команду.

Рекомендуется заключать аргумент в кавычки, чтобы метасимволы оболочки не расширялись.

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

В демонстрационных целях мы будем использовать следующий файл:

Если флаг g опущен, заменяется только первый экземпляр строки поиска в каждой строке:

С флагом глобальной замены sed заменяет все вхождения шаблона поиска:

Как вы могли заметить, подстрока foo внутри строки foobar также заменена в предыдущем примере. Если это нежелательное поведение, используйте выражение границы слова ( b ) на обоих концах строки поиска. Это гарантирует, что частичные слова не совпадают.

Чтобы сделать совпадение с шаблоном нечувствительным к регистру, используйте флаг I В приведенном ниже примере мы используем флаги g и I

Читайте также:  Windows 10 ssd problems

Если вы хотите найти и заменить строку, содержащую символ-разделитель ( / ), вам нужно будет использовать обратную косую черту ( ), чтобы избежать косой черты. Например, чтобы заменить /bin/bash на /usr/bin/zsh вы должны использовать

Более простой и понятный вариант — использовать другой символ-разделитель. Большинство людей используют вертикальную полосу ( | ) или двоеточие ( : ) , но вы можете использовать любой другой символ:

Вы также можете использовать регулярные выражения. Например, чтобы найти все трехзначные числа и заменить их строковым number вы должны использовать:

Еще одна полезная функция sed заключается в том, что вы можете использовать символ амперсанда & который соответствует сопоставленному шаблону. Персонаж можно использовать несколько раз.

Например, если вы хотите добавить фигурные скобки <> вокруг каждого трехзначного числа, введите:

И последнее, но не менее важное: всегда рекомендуется делать резервную копию при редактировании файла с помощью sed . Для этого просто укажите расширение файла резервной копии для параметра -i . Например, чтобы отредактировать file.txt и сохранить исходный файл как file.txt.bak вы должны использовать:

Чтобы убедиться, что резервная копия создана, выведите список файлов с помощью команды ls :

Рекурсивный поиск и замена

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

Следующая команда будет рекурсивно искать файлы в текущем рабочем каталоге и передавать имена файлов в sed .

Чтобы избежать проблем с файлами, содержащими пробелы в своих именах, используйте параметр -print0 , который указывает find напечатать имя файла, за которым следует нулевой символ, и xargs -0 вывод в sed используя xargs -0 :

Чтобы исключить каталог, используйте параметр -not -path . Например, если вы заменяете строку в локальном репозитории git, чтобы исключить все файлы, начинающиеся с точки ( . ), Используйте:

Если вы хотите искать и заменять текст только в файлах с определенным расширением, вы будете использовать:

Другой вариант — использовать команду grep для рекурсивного поиска всех файлов, содержащих шаблон поиска, а затем передать имена файлов в sed :

Выводы

Хотя это может показаться сложным и сложным, поначалу поиск и замена текста в файлах с помощью sed очень просты.

Чтобы узнать больше о sed команд, опций и флагов, посетить GNU СЭД руководство и Grymoire СЭД учебник .

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

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

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

Недавно столкнулся с проблемой, мне нужно было найти определенные слова в файлах и заменить их на нужный мне текст. Немного поискав в интернете, я нашел как это сделать, по этому решил записать заметку «Поиск и замена слов в файлах linux», пригодится как мне так и другим пользователям. Это можно сделать командой find и grep с некоторыми параметрами.

Простой поиск с использованием grep:

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

Удаление определенного символа из файлов

Нужно символы прописывать в уникоде, если правильно понял.

Как заменить слово в файлах при рекурсивном поиске Linux?

Этой строкой мы ищем во всех файлах с разрешением *.py от текущей директории строку text_1 и заменяя ее наtext_2, так же можно использовать regexp выражения.

Для начала делаем поиск по фразе которая нам необходима, нам покажет все файлы и в каких строках содержится данная фраза:

или для конкретных файлов:

Выполнить замену можно еще следующим образом:

Допустим, Вам необходимо выполнить замену целой строки ( закомментировать какую либо функцию, добавив // перед самой функцией), то можно это сделать:

Читайте также:  Графический пароль для windows

Экранируем спец символы и заменяем на любую другую строку, для этого:

Данная команда заменит одну строку на другую во всех файлах.

Упрощенная версия ее:

Можно удалить многострочное содержание текста который находиться, например между //###==### и //###==###

То чтобы удалить все строки кода между данными комментариями, выполните:

Я делал сканирование maldet и нашел много вредоносного кода, по этому, я удалил его так:

Предположим, имеется файл и в нем находится:

Но по заданию, нужно чтобы было — Three.Two.One

Для этого, выполним:

PS: О долбанном SED-е я расскажу очень не скоро, он меня реально бесит и злит. Кто ее придумал, реальный сука ДЖЕДАЙ 😀

Делаем замену другим способом:

ПРИМЕЧАНИЕ! Утилиту rpl необходимо установить.

Я попозже постараюсь привести еще примеров и рассказать о утилите в своей новой статье.

Когда не удобно искать файлы в консольном режиме и есть GUI интерфейс, то можно воспользоваться утилитой regexxer.

Очень простая и хорошая утилита, я сам ею пользовался и тестировал на своей виртуальной машине на Debian.

На этом моя короткая заметка «Поиск и замена слов в файлах linux» завершена и готова к использованию.

Источник

linux-notes.org

Недавно столкнулся с проблемой, мне нужно было найти определенные слова в файлах и заменить их на нужный мне текст. Немного поискав в интернете, я нашел как это сделать, по этому решил записать заметку «Поиск и замена слов в файлах linux», пригодится как мне так и другим пользователям. Это можно сделать командой find и grep с некоторыми параметрами.

Простой поиск с использованием grep:

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

Удаление определенного символа из файлов

Нужно символы прописывать в уникоде, если правильно понял.

Как заменить слово в файлах при рекурсивном поиске Linux?

Этой строкой мы ищем во всех файлах с разрешением *.py от текущей директории строку text_1 и заменяя ее наtext_2, так же можно использовать regexp выражения.

Еще примеры

Для начала делаем поиск по фразе которая нам необходима, нам покажет все файлы и в каких строках содержится данная фраза:

или для конкретных файлов:

Выполнить замену можно еще следующим образом:

Допустим, Вам необходимо выполнить замену целой строки ( закомментировать какую либо функцию, добавив // перед самой функцией), то можно это сделать:

Экранируем спец символы и заменяем на любую другую строку, для этого:

Данная команда заменит одну строку на другую во всех файлах.

Упрощенная версия ее:

Можно удалить многострочное содержание текста который находиться, например между //###==### и //###==###

То чтобы удалить все строки кода между данными комментариями, выполните:

Я делал сканирование maldet и нашел много вредоносного кода, по этому, я удалил его так:

Как заменить всю строку на другую? Та вот так можно:

Или тоже самое, но через переменные:

-===Пример===-

Предположим, имеется файл и в нем находится:

Но по заданию, нужно чтобы было — Three.Two.One

Для этого, выполним:

PS: О долбанном SED-е я расскажу очень не скоро, он меня реально бесит и злит. Кто ее придумал, реальный сука ДЖЕДАЙ 😀

Делаю замену версий в Terraform так:

Делаем замену другим способом:

ПРИМЕЧАНИЕ! Утилиту rpl необходимо установить.

Я попозже постараюсь привести еще примеров и рассказать о утилите в своей новой статье.

Когда не удобно искать файлы в консольном режиме и есть GUI интерфейс, то можно воспользоваться утилитой regexxer.
Debian/Ubuntu/Mint:

CentOS/RedHat/Fedora:

Очень простая и хорошая утилита, я сам ею пользовался и тестировал на своей виртуальной машине на Debian.

На этом моя короткая заметка «Поиск и замена слов в файлах linux» завершена и готова к использованию.

Источник

Оцените статью