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

Читайте также:  Access для linux аналоги

Переместить файлы размером >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 не отрабатывает на файле размером 15 гигабайт, на части этого файла отрабатывает. Не отрабатывает это значит что-то делает, ошибок нет, но файл не меняется.

задача была такая 1. заменить \n на ‘,’ «концов строки» может быть несколько \n\n\n а запятая нужна одна, в самом конце запятая не нужна 2. в начале файла воткнуть 1 символ 3. в конец файла воткнуть 1 символ

в итоге файл с 111111 222222 333333

нужно было переделать в [11111,22222,33333] не меняя имени файла

нашел такие варианты(возможно не самые лучшие) sed -i -r ‘:a;N;$!ba;s/\n+/,/g’ FILE; sed -i -e ‘1 s/^/[/;’ FILE; echo «]» >> FILE

попробовал 1000 строк и 3 гигабайта и уже на этом объеме проблема, попробую найти размер с которого начинается проблема

ЕМНИП, sed с ключем -i делает копию файла в /tmp, соотвественно, если /tmp у тебя смонтирован в память, то большой файл туда просто не влезает.

Насколько я помню (возможно ошибаюсь), единственный способ заставить sed обрабатывать файлы не построчно (чтобы заменять \n) приводит к тому, что весь файл загружается в память. Так что для больших файлов твой подход может не работать.

Попробуй лучше вот так:

нет не в память, места много, похоже граница проблем проходит по отметке 2Gb

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

он создает временный файл в /tmp, потом перезаписывает, сделай явно sed . > /раздел-заведомо-с-достаточным-местом/файл

Не, так всё равно выжирает память. Не могу придумать как при помощи sed обрабатывать файлы по несколько гигабайт на строку. Видимо проще будет решить твою задачу небольшой программой на C или любом другом нормальном ЯП.

похоже граница проблем проходит по отметке 2Gb

ну может еще в файле слишком длинная строка в этом месте, можно попробовать проверить: awk ‘(b=length($0)) > a END

одна строка это десятки MGB а вот сам файл десятки Gb это сервер, на нем 32Gb памяти

Источник

linux-notes.org

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

Читайте также:  Интеграция драйверов windows dism

Простой поиск с использованием 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» завершена и готова к использованию.

Источник

Найти и заменить текст в файле с помощью команд

Как я могу найти и заменить определенные слова в текстовом файле, используя командную строку?

  • sed = Stream EDitor
  • -i = на месте (т.е. сохранить обратно в исходный файл)
  • s = команда замены
  • original = регулярное выражение, описывающее слово для замены (или только само слово)
  • new = текст для замены
  • g = глобальный (т.е. заменить все, а не только первое вхождение)

file.txt = имя файла

Есть несколько разных способов сделать это. Один использует sed и Regex. SED — это потоковый редактор для фильтрации и преобразования текста. Один пример выглядит следующим образом:

Другой способ , который может иметь больше смысла , чем и > strout является с трубами!

Есть множество способов достичь этого. В зависимости от сложности того, чего можно достичь с помощью замены строки, и в зависимости от инструментов, с которыми пользователь знаком, некоторые методы могут быть предпочтительнее других.

В этом ответе я использую простой input.txt файл, который вы можете использовать для проверки всех примеров, представленных здесь. Содержимое файла:

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

Этот небольшой скрипт не выполняет замену на месте, это означает, что вам придется сохранить новый текст в новый файл и избавиться от старого файла, или mv new.txt old.txt

Примечание: если вам интересно, почему while IFS= read -r ; do . done он используется, то в основном это способ чтения файла строка за строкой. Смотрите это для справки.

AWK, будучи утилитой обработки текста, вполне подходит для такой задачи. Он может делать простые замены и намного более сложные, основанные на регулярных выражениях . Он обеспечивает две функции: sub() и gsub() . Первый из них заменяет только первое вхождение, а второй — заменяет вхождения во всей строке. Например, если у нас есть строка one potato two potato , это будет результат:

AWK может принять входной файл в качестве аргумента, поэтому input.txt было бы легко сделать то же самое с :

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

Sed — это редактор строк. Он также использует регулярные выражения, но для простых замен достаточно сделать:

Что хорошо в этом инструменте, так это то, что он имеет редактирование на месте, которое вы можете включить с -i флагом.

Perl — это еще один инструмент, который часто используется для обработки текста, но это язык общего назначения, который используется в сетях, системном администрировании, настольных приложениях и во многих других местах. Он заимствовал много концепций / функций из других языков, таких как C, sed, awk и другие. Простую замену можно сделать так:

Как и у sed, у perl также есть флаг -i.

питон

Этот язык очень универсален и также используется в самых разных приложениях. Он имеет много функций для работы со строками, среди которых есть replace() , так что если у вас есть переменная, как var=»Hello World» , вы могли бы сделать var.replace(«Hello»,»Good Morning»)

Простой способ прочитать файл и заменить строку в нем будет так:

Однако в Python вам также нужно выводить в новый файл, что вы также можете сделать из самого скрипта. Например, вот простой:

Источник

Как заменить строку в файле в Bash

Главное меню » Linux » Как заменить строку в файле в Bash

Заменить строку в файле командой `sed`

Базовый синтаксис команды ‘sed’ для замены конкретной строки в файле приведен ниже.

Каждая часть приведенного выше синтаксиса объясняется ниже.

Параметр ‘-i‘ используется для изменения содержимого исходного файла с заменой строки, если строка поиска существует в файле.

s‘ указывает заменяющую команду.

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

replace_string содержит строковое значение, которое будет использоваться для замены содержимого файла, соответствующего значению search_string .

filename‘ содержит имя файла, в котором будет применяться поиск и замена.

Пример 1: заменить файл командой sed

В следующем скрипте текст для поиска и замены будет взят у пользователя. Если строка поиска существует в Sales.txt, она будет заменена строкой замены. Здесь будет выполняться поиск с учетом регистра.

Пример 2: Замена файла командой sed с флагом g и i

Следующий сценарий будет работать так же, как и предыдущий пример, но в строке поиска будет производиться глобальный поиск флага «g», а поиск без учета регистра будет выполняться для флага «i».

Пример 3. Замена файла командой sed и шаблоном совпадающих цифр

Следующий сценарий выполнит поиск всего числового содержимого в файле и заменит содержимое, добавив символ «$» в начале чисел.

Заменить строку в файле командой awk

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

Пример 4: заменить файл командой awk

Следующий скрипт сохранит обновленное содержимое в файле temp.txt, который будет переименован в исходный файл.

Вывод

В этой статье показано, как использовать сценарии bash для замены определенных строк в файле. Задача по замене строки в файле станет для вас проще после отработки приведенных выше примеров.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Читайте также:  Майкрософт windows 10 корпоративная 2016 с долгосрочным обслуживанием 64 bit
Оцените статью