Замена строк
![](http://mediasubs.ru/author/avatar/4736602.png)
Здравствуйте.
Подскажите пожалуйста простенький скрипт делающий следующее: Поиск строки в
файле удовлетворяющей заданному шаблону и замена её на некую другую строку.
Понимаю что это sed и(или) awk. Но как?
За последние 60 дней ни разу не выходила
Сайт листа:
http://www.linuxrsp.ru
Открыт:
25-07-2003
Пре-модерация: Нет
Адрес для писем в лист: comp.soft.linux.discuss-list@subscribe.ru
Адрес
модератора: comp.soft.linux.discuss-owner@subscribe.ru
Здравствуйте.
Подскажите пожалуйста простенький скрипт делающий следующее: Поиск строки в
файле удовлетворяющей заданному шаблону и замена её на некую другую строку.
Понимаю что это sed и(или) awk. Но как?
i686-pc-linux-gnu)
Hello, brainstorm <dnas***@y*****.ru>!
On Sat, 26 Feb 2005 21:55:01 +0000 you wrote:
cut from "man sed":
sed s/regexp/replacement
Например,
cat file.txt | sed s/a/b >file.txt
заменит в файле file.txt все буквы 'a' на 'b'.
В сообщении от 1109459007 секунд после начала Эпохи Unix Вы написали:
| |
+--------> = <--------+
Такое делать нельзя.
Не `s/a/b', а `s/a/b/'.
Не все, а только первые найденные в каждой строке.
$ sed -i 's/Ошипка/Ошибка/g' file.txt
Заменит ВСЕ слова "Ошипка" на "Ошибка".
$ sed -i 's/^всего: /Всего: /' file.txt
Заменит "всего: ", которое расположено в начале строки, на
"Всего: ".
i686-pc-linux-gnu)
On Sun, 27 Feb 2005 14:54:55 +0200 you wrote:
Да, что-то я немного фигни понаписал с недосыпу. Прошу извинить:)
i386-pc-linux-gnu)
On Sun, 27 Feb 2005 01:03:27 +0300
Denis Silakov <d_urag***@r*****.ru> wrote:
А как сделать замену сразу в нескольких файлах? К примеру в директории сайта
заменить что-то на что-то, да еще и во всех подпапках посмотреть?
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 16267; Возраст листа: 584; Участников: 1338
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/324262
On Воскресенье 27 Февраль 2005 16:06, Потребенко Евгений wrote:
Такое не пройдёт - содержимое file.txt будет уничтожено до того,
как cat его откроет.
например оформить script типа такого:
#!/bin/sh
file="$1"
sed что-надо <"$file" > "$file".new
mv $file" "$file".old && mv $file".new "$file"
И вызывать его из find:
find . -type f -iname '*.txt' -exect the-script {} \;
В сообщении от 1109604096 секунд после начала Эпохи Unix Вы написали:
Зачем скрипты? Все делается из командной строки:
$ find . -type f -iname '*.php' -exec sed -i 's/\$dbname/\$db_name/g' \{\}
\;
Sed должен быть версии не ниже 3.95. Нету Sed - используем Perl:
$ find . -type f -iname '*.php' -exec perl -i -p -e 's/\$dbname/\$db_name/g'
\{\} \;
Hi brainstorm, you wrote:
sed s/шаблон/замена/
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 16225; Возраст листа: 583; Участников: 1338
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/323490
On Sat, 26 Feb 2005 21:55:01 +0000
brainstorm <dnas***@y*****.ru> wrote:
Начало файла repl_string #!/bin/bash
mv $1 $1.old
awk '{if(/Искомая строка/) {print "Строка замены"} else {print}}' $1.old > $1
Конец файла $./repl_string твой_файл
Буду рад, если помог. В.Ковалев
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 16230; Возраст листа: 583; Участников: 1339
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/323517
В сообщении от Суббота 26 Февраль 2005 19:33 Владимир Ковалев написал(a):
А как тогда сделать следующее: Если первое слово в строке = заданный шаблон,
тогда заменить всю строку.
On Sun, 27 Feb 2005 10:22:34 +0000
brainstorm <dnas***@y*****.ru> wrote:
$1
awk '{if($1~/Искомое_слово/) {print "Строка замены"} else {print}}' $1.old >
$1
# ^^ ^^
# Это переменная awk Это переменная bash
# $1 - первое слово, $2 - второе слово и т.д.
Буду рад, если помог. В.Ковалев
PS:
http://www.opennet.ru/docs/sed_awk/sed_awk.html (19975 b)
http://linuxdoc.h10.ru/man/man1/sed.1.html (13703 b)
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 16235; Возраст листа: 583; Участников: 1339
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/323622
On Sun, 27 Feb 2005 10:22:34 +0000
brainstorm <dnas***@y*****.ru> wrote:
#-- replase.sed #!/bin/sed -f
$b
/^Искомое_слово/ c Строка замены
p
d
#$./replase.sed ваш_файл > итоговый_файл
или
#-- replase.awk
#!/bin/awk -f
{
if ($1~/Камни/) {
print "Строка замены"
} else {
print
}
}
#$./replase.awk ваш_файл > итоговый_файл
Плиз за изврат. Ну люблю я такие вещи.
Буду рад, если помог. В.Ковалев
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 16249; Возраст листа: 583; Участников: 1339
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/323782
On Sat, 26 Feb 2005 21:55:01 +0000, brainstorm <dnas***@y*****.ru> wrote:
Читай по русски
http://www.citforum.ru/operating_systems/articles/sed_awk.shtml
А это лучшая по английски
http://hell.org.ua/Docs/oreilly/unix/sedawk/
Виктор
i386-redhat-linux-gnu)
On Sat, 26 Feb 2005 21:55:01 +0000
brainstorm <dnas***@y*****.ru> wrote:
в
sed -e "/искомый шаблон/ s/.*/новое содержимое строки/"
--
с уважением, александр баракин.
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 16271; Возраст листа: 584; Участников: 1338
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/324304
On Суб, 2005-02-26 at 21:55 +0000, brainstorm wrote:
Если у вас дистрибутив от ALT - там есть утилита subst. Если в вашем
дистрибутиве ее нет - в аттаче лежит заменитель.