Отправляет email-рассылки с помощью сервиса Sendsay

Замена строк

Здравствуйте.
Подскажите пожалуйста простенький скрипт делающий следующее: Поиск строки в
файле удовлетворяющей заданному шаблону и замена её на некую другую строку.
Понимаю что это sed и(или) awk. Но как?

Ответить   brainstorm Sat, 26 Feb 2005 21:55:01 +0000 (#323318)

 

Ответы:

On Суб, 2005-02-26 at 21:55 +0000, brainstorm wrote:

Если у вас дистрибутив от ALT - там есть утилита subst. Если в вашем
дистрибутиве ее нет - в аттаче лежит заменитель.

Ответить   Yura Kalinichenko Sat, 26 Feb 2005 23:40:48 +0200 (#323482)

 

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'.

Ответить   Sun, 27 Feb 2005 01:03:27 +0300 (#323487)

 

В сообщении от 1109459007 секунд после начала Эпохи Unix Вы написали:

| |
+--------> = <--------+

Такое делать нельзя.

Не `s/a/b', а `s/a/b/'.

Не все, а только первые найденные в каждой строке.

$ sed -i 's/Ошипка/Ошибка/g' file.txt

Заменит ВСЕ слова "Ошипка" на "Ошибка".

$ sed -i 's/^всего: /Всего: /' file.txt

Заменит "всего: ", которое расположено в начале строки, на
"Всего: ".

Ответить   Konstantin Korikov Sun, 27 Feb 2005 14:54:55 +0200 (#323729)

 

i686-pc-linux-gnu)

On Sun, 27 Feb 2005 14:54:55 +0200 you wrote:

Да, что-то я немного фигни понаписал с недосыпу. Прошу извинить:)

Ответить   Mon, 28 Feb 2005 01:27:26 +0300 (#323934)

 

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

Ответить   Потребенко Евгений Sun, 27 Feb 2005 15:06:57 +0200 (#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 {} \;

Ответить   "Sergey B. Khvatov" Mon, 28 Feb 2005 17:21:36 +0300 (#324265)

 

В сообщении от 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'
\{\} \;

Ответить   Konstantin Korikov Mon, 28 Feb 2005 23:08:35 +0200 (#324493)

 

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

Ответить   j1m Sun, 27 Feb 2005 03:18:52 -0600 (#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

Ответить   Sun, 27 Feb 2005 01:33:22 +0600 (#323517)

 

В сообщении от Суббота 26 Февраль 2005 19:33 Владимир Ковалев написал(a):

А как тогда сделать следующее: Если первое слово в строке = заданный шаблон,

тогда заменить всю строку.

Ответить   brainstorm Sun, 27 Feb 2005 10:22:34 +0000 (#323540)

 

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

Ответить   Sun, 27 Feb 2005 14:20:34 +0600 (#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

Ответить   Sun, 27 Feb 2005 22:28:56 +0600 (#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/

Виктор

Ответить   vdr Sun, 27 Feb 2005 16:02:48 +0200 (#323848)

 

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

Ответить   Mon, 28 Feb 2005 17:22:52 +0200 (#324304)