Есть ли команда для замены текста в файле
Модератор: Модераторы разделов
-
- Сообщения: 72
- ОС: Лиц. Mandriva 2008
Есть ли команда для замены текста в файле
Есть ли в консоли команда, с помощью которой можно находить и заменять содержимое текстовых файлов? Что-то типа: ЗАМЕНИТЬ "сторока1" "строка2".
Не злитесь на мои вопросы пожалуйста! Все гуру начинали с чайников!
-
- Сообщения: 599
- ОС: Archlinux
Re: Есть ли команда для замены текста в файле
vim позволяет и не такие фишки...
-
- Бывший модератор
- Сообщения: 7275
- Статус: Пенсионер в законе
- ОС: Cintu
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Есть ли команда для замены текста в файле
Наверное, все же имелось в виду, что нужно консольное приложение, которое просто пройдется, без лишних телодвижений со стороны пользователя, по всем файлам и сделает замену. Имхо, без чтения манов sed или awk/gawk тут, увы, не обойтись, как, впрочем, и без связки "find + sed" или "find + awk".
-
- Бывший модератор
- Сообщения: 7275
- Статус: Пенсионер в законе
- ОС: Cintu
Re: Есть ли команда для замены текста в файле
serzh-z писал(а): ↑12.11.2006 11:55Наверное, все же имелось в виду, что нужно консольное приложение, которое просто пройдется, без лишних телодвижений со стороны пользователя, по всем файлам и сделает замену. Имхо, без чтения манов sed или awk/gawk тут, увы, не обойтись, как, впрочем, и без связки "find + sed" или "find + awk".
Да конечно, обычно для таких целей sed проще всего использовать, не нужно возиться с перенаправлениями и временными файлами.На posix.ru Madskull на конкретных примерах это здорово описал
-
- Сообщения: 72
- ОС: Лиц. Mandriva 2008
Re: Есть ли команда для замены текста в файле
(serzh-z @ Nov 12 2006, в 11:55) писал(а):Наверное, все же имелось в виду, что нужно консольное приложение, которое просто пройдется, без лишних телодвижений со стороны пользователя, по всем файлам и сделает замену.
ДА!
Что-то слишком сложно всё получается. Лучше я сам напишу такую утилиту.
Не злитесь на мои вопросы пожалуйста! Все гуру начинали с чайников!
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Есть ли команда для замены текста в файле
(Без имени @ Nov 12 2006, в 12:39) писал(а):Лучше я сам напишу такую утилиту.
могу подсказать отправную точку:
find путь -type f -exec sed -i -e 's/строка1/строка2/' '{}' ';'
updated: набирая команду, напрочь упустил параметры sed-а. и ведь не поправил никто! обидно, да? (:
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Сообщения: 72
- ОС: Лиц. Mandriva 2008
Re: Есть ли команда для замены текста в файле
Написал! B)
Код: Выделить всё
package textreplace;
import java.io.*;
public class Main
{
public static void showHelp()
{
System.out.println("Утилита для поиска и замены текста в файлах.");
System.out.println("Синтаксис: TextReplacer ИмяФайла \"Исходная строка\" \"Новая строка\" ");
}
public static void replaceText(String file, String Orig, String Repl) throws FileNotFoundException, IOException
{
// Имя временного файла
String TempFileName = file+"_temp";
// Погнали замену!
BufferedReader BR = new BufferedReader(new FileReader(file));
BufferedWriter BW = new BufferedWriter(new FileWriter(TempFileName));
while (BR.ready())
{
String S = BR.readLine();
S = S.replaceAll(Orig, Repl);
BW.write(S+'\n');
}
BW.close();
BW.close();
// Удаляем исходный файл и переименовываем временный
File OF = new File(file);
if (!OF.delete())
System.out.println("Не удалось удалить исходный файл!");
else
new File(TempFileName).renameTo(OF);
}
public static void main(String[] args)
{
// Если никакие аргументы не переданы, то показываем хелп
if (args.length!=3)
showHelp();
else
{
try
{
replaceText(args[0], args[1], args[2]);
}
catch (FileNotFoundException ex)
{
System.out.println("Файл не найден!");
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
}
Не злитесь на мои вопросы пожалуйста! Все гуру начинали с чайников!
-
- Бывший модератор
- Сообщения: 7275
- Статус: Пенсионер в законе
- ОС: Cintu
Re: Есть ли команда для замены текста в файле
Коллеги-программеры - как? В проекты форума?
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Есть ли команда для замены текста в файле
Круто... Что там нужно - JDK теперь поставить? 
alv
Наверное можно и в проекты... Для самых ленивых. Так, просто чтобы не пропало даром. Но, имхо, тогда уж туда нужно класть готовое к выполнению приложение Java. Потому как специально никто ставить JDK не будет.

alv
Наверное можно и в проекты... Для самых ленивых. Так, просто чтобы не пропало даром. Но, имхо, тогда уж туда нужно класть готовое к выполнению приложение Java. Потому как специально никто ставить JDK не будет.

-
- Сообщения: 2910
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
- Бывший модератор
- Сообщения: 7275
- Статус: Пенсионер в законе
- ОС: Cintu
Re: Есть ли команда для замены текста в файле
(Liksys @ Nov 12 2006, в 15:17) писал(а):Прадлагаю переписать на Питоне или С
Вот в проектах все это и обсудить - на Си там, или Си++
PS а я уж по сермяжному - find да sed

-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Есть ли команда для замены текста в файле
Гм, ну раз уж начали пьянствовать, то вот:
Соответственно, все сводится к этому: find / -iname '*.txt' -exec my_replace GNU UNG {} \;
Код: Выделить всё
#!/bin/sh
TEMPFILE=`tempfile`
sed s/$2/$3/ $1 > ${TEMPFILE}
mv ${TEMPFILE} $1
Соответственно, все сводится к этому: find / -iname '*.txt' -exec my_replace GNU UNG {} \;
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Есть ли команда для замены текста в файле
serzh-z
в твоем скрипте с номерами параметров накладочка. по крайней мере, они не соответствуют приведенному примеру вызова скрипта.
p.s. хм. кстати, зачем создавать временный файл? sed это сделает сам. параметр -i ( http://linuxforum.ru/index.php?s=&show...st&p=280490 )
p.p.s. черт, ссылку на свой пост привел, а потом только увидел, что параметры-то там вообще отсутствуют (:
поправил.
в твоем скрипте с номерами параметров накладочка. по крайней мере, они не соответствуют приведенному примеру вызова скрипта.
p.s. хм. кстати, зачем создавать временный файл? sed это сделает сам. параметр -i ( http://linuxforum.ru/index.php?s=&show...st&p=280490 )
p.p.s. черт, ссылку на свой пост привел, а потом только увидел, что параметры-то там вообще отсутствуют (:
поправил.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Бывший модератор
- Сообщения: 7275
- Статус: Пенсионер в законе
- ОС: Cintu
Re: Есть ли команда для замены текста в файле
(sash-kan @ Nov 12 2006, в 15:49) писал(а):зачем создавать временный файл? sed это сделает сам
вот и я про то
и давно ведь уже делает

-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Есть ли команда для замены текста в файле
А, ну да. Имя файла первое должно быть. Я перед этим весь man sed перекопал на предмет того, чтобы обойтись без временного файла. Сэнкс за "-i" - оказывается я его искал.

-
- Бывший модератор
- Сообщения: 7275
- Статус: Пенсионер в законе
- ОС: Cintu
Re: Есть ли команда для замены текста в файле
(serzh-z @ Nov 12 2006, в 15:56) писал(а):Я перед этим весь man sed перекопал на предмет того, чтобы обойтись без временного файла.
И опять же - а для кого Madskull свой труд писал?
http://posix.ru/shell/sed_tips/
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Есть ли команда для замены текста в файле
Его я читал когда-то, и даже распечатывал. Но увы, объем памяти не позволяет все помнить. 
