- Заметки Лёвика
- web программирование, администрирование и всякая всячина, которая может оказаться полезной
- linux — массовый поиск и замена в файлах
- Поиск файлов по размеру
- Комментарии (3) к записи “linux — массовый поиск и замена в файлах”
- Как использовать sed для поиска и замены строки в файлах
- Найти и заменить строку с помощью sed
- Рекурсивный поиск и замена
- Выводы
- Найти и заменить в Vim / Vi
- Базовый поиск и замена
- Чувствительность к регистру
- Диапазон поиска
- Замена всего слова
- История замены
- Примеры
- Вывод
Заметки Лёвика
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 СЭД учебник .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
Найти и заменить в Vim / Vi
В этой статье описывается, как найти и заменить текст в Vim / Vi.
Vim — самый популярный текстовый редактор командной строки. Он предустановлен в macOS и большинстве дистрибутивов Linux. Найти и заменить текст в Vim быстро и легко.
Базовый поиск и замена
В Vim вы можете найти и заменить текст с помощью команды :substitute ( :s ).
Чтобы запускать команды в Vim, вы должны находиться в обычном режиме, который используется по умолчанию при запуске редактора. Чтобы вернуться в обычный режим из любого другого режима, просто нажмите клавишу «Esc».
Общая форма команды замены следующая:
Команда ищет в каждой строке в [range]
Если не [range] и [count] , заменяется только шаблон, найденный в текущей строке. Текущая строка — это строка, в которой находится курсор.
Например, чтобы найти первое вхождение строки ‘foo’ в текущей строке и заменить его на ‘bar’, вы должны использовать:
Чтобы заменить все вхождения шаблона поиска в текущей строке, добавьте флаг g
Если вы хотите найти и заменить шаблон во всем файле, используйте процентный символ % в качестве диапазона. Этот символ указывает диапазон от первой до последней строки файла:
Если часть
Вместо символа косой черты ( / ) можно использовать любой другой однобайтный символ, кроме буквенно-цифрового, кроме разделителя. Этот параметр полезен, если в шаблоне поиска или в строке замены есть символ «/».
Для подтверждения каждой замены используйте флаг c
Нажмите y чтобы заменить совпадение, или l чтобы заменить совпадение и выйти. Нажмите n чтобы пропустить совпадение, и q или Esc чтобы выйти из замены. Параметр a заменяет совпадение и все оставшиеся вхождения совпадения. Для прокрутки экрана вниз используйте CTRL+Y , а для прокрутки вверх используйте CTRL+E
Вы также можете использовать регулярные выражения в качестве шаблона поиска. Приведенная ниже команда заменяет все строки, начинающиеся с ‘foo’ на ‘Vim is the best’:
Символ ^ (каретка) соответствует началу строки, а .* Соответствует любому количеству любых символов.
Чувствительность к регистру
По умолчанию операция поиска чувствительна к регистру; поиск «FOO» не будет соответствовать «Foo».
Чтобы игнорировать регистр для шаблона поиска, используйте флаг i
Другой способ принудительно игнорировать регистр — добавить c после шаблона поиска. Например, /Linuxc выполняет поиск без учета регистра.
Если вы изменили настройку регистра по умолчанию и хотите выполнять поиск с учетом регистра, используйте флаг I
Верхний регистр C после шаблона также приводит к поиску совпадения по регистру.
Диапазон поиска
Если диапазон не указан, подстановочная команда работает только в текущей строке.
Диапазон может быть одной строкой или диапазоном между двумя строками. Спецификаторы строки разделяются символами , или ; символы. Диапазон можно указать с помощью абсолютного номера строки или специальных символов.
Например, чтобы заменить все вхождения ‘foo’ на ‘bar’ во всех строках, начиная со строки 3 по строку 10, вы должны использовать:
Диапазон является включительным, что означает, что первая и последняя строки включены в диапазон.
Точка . символ указывает на текущую строку и $ — доллар знак последней строки. Чтобы заменить ‘foo’ во всех строках, начиная с текущей и заканчивая последней:
Спецификатор строки также может быть установлен с помощью символа «+» или «-», за которым следует число, которое добавляется или вычитается из номера предыдущей строки. Если число после символа опущено, по умолчанию используется 1.
Например, чтобы заменить каждое ‘foo’ на ‘bar’, начиная с текущей строки и четырех следующих строк, введите:
Замена всего слова
Команда замены ищет образец как строку, а не целое слово. Если, например, вы искали «gnu», поиск совпадет с тем, что «gnu» встроено в слова большего размера, такие как «cygnus» или «magnum».
Для поиска всего слова введите чтобы отметить начало слова, введите шаблон поиска, введите > чтобы отметить конец слова:
Например, для поиска слова «foo» вы должны использовать :
История замены
Vim отслеживает все команды, которые вы выполняете в текущем сеансе. Чтобы просмотреть историю предыдущих заменяющих команд, введите :s и используйте клавиши со стрелками вверх / вниз, чтобы найти предыдущую заменяющую операцию. Чтобы запустить команду, просто нажмите Enter . Вы также можете отредактировать команду перед выполнением операции.
Примеры
Строки комментариев (добавьте # перед строкой) от 5 до 20:
Раскомментируйте строки с 5 по 20, отмените предыдущие изменения:
Замените все экземпляры «яблоко», «апельсин» и «манго» на «фрукты»:
Удалите завершающие пробелы в конце каждой строки:
Вывод
Поиск и замена — это мощная функция Vim, которая позволяет быстро вносить изменения в текст.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Источник