LINUX.ORG.RU

Умный скрипт


0

0

Привет,
Пожалуйста, помогите, кто чем может!

Трабл:

есть файл с кодом на С и есть там строчки:

#include "old/header1.h"
#include "old/header2.h"
#include "old/header3.h"

и т.д.
мне надо заменить все такие инклюды только на один:

#include "new.h"

Желательно сделать это на sed, но буду рад любым вариантам.
Спасибо!

PS: заменять сразу все, а потом использовать uniq не подходит.

А ты линк сдалей old на new :)

anonymous
()

awk 'BEGIN{f=0;}
     {if(!f){
         if( $0 ~ /#include "old\/header[0-9]+.h"/){ 
            print "#include \"new.h\"";
            f=1;
         } 
      }else{
         print $0;
      }
     }' input_file.c


ARom

anonymous
()

Во, блин, изврат!

Как просил, только sed. Сработает с любым кол-вом пустых строк 
между инклудами, если после последнего инклуда есть хоть 
какой-нибудь текст:

#!/bin/sh
cat $1 |sed  's/#include "old\/header[0-9]*\.h"/Bgn End/'\
|sed -e :a -e '/Bgn End$/N; s/Bgn End\n/Bgn End/; ta' \
-e 's/Bgn .*End/#include "new\.h"\
/'

Die-Hard ★★★★★
()

Ребята, спасибо. Я кстати написал скрипт, а потом только ваши посты посмотрел (надо было срочно писать).

2ARom - мы с тобой братья по разуму - я написал в точности как ты (с точностью до названий переменных).

2Die-Hard - вовсе не изврат, IMHO, просто люблю я очень awk. Это мой первый опыт программирования в Юниксах.

BreadFan ★★
() автор топика
Ответ на: комментарий от BreadFan

BreadFan (*) (2003-03-25 19:52:10.6056):
> ...вовсе не изврат, IMHO, просто люблю я очень awk.
"Изврат" - это я про свое решение :-)

Просто ты просил на sed'е, я и сделал (чисто из спортивного интереса).
И это, действительно, изврат. Для подобных вещей awk и придумали.

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.