- Заметки Лёвика
- web программирование, администрирование и всякая всячина, которая может оказаться полезной
- linux — массовый поиск и замена в файлах
- Поиск файлов по размеру
- Комментарии (3) к записи “linux — массовый поиск и замена в файлах”
- Как использовать sed для поиска и замены строки в файлах
- Найти и заменить строку с помощью sed
- Рекурсивный поиск и замена
- Выводы
- Поиск и замена слов в файлах linux
- linux-notes.org
Заметки Лёвика
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
Если вы хотите найти и заменить строку, содержащую символ-разделитель ( / ), вам нужно будет использовать обратную косую черту ( ), чтобы избежать косой черты. Например, чтобы заменить /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 выражения.
Для начала делаем поиск по фразе которая нам необходима, нам покажет все файлы и в каких строках содержится данная фраза:
или для конкретных файлов:
Выполнить замену можно еще следующим образом:
Допустим, Вам необходимо выполнить замену целой строки ( закомментировать какую либо функцию, добавив // перед самой функцией), то можно это сделать:
Экранируем спец символы и заменяем на любую другую строку, для этого:
Данная команда заменит одну строку на другую во всех файлах.
Упрощенная версия ее:
Можно удалить многострочное содержание текста который находиться, например между //###==### и //###==###
То чтобы удалить все строки кода между данными комментариями, выполните:
Я делал сканирование 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» завершена и готова к использованию.
Источник