[sed] Regular expression match willekeurig wel/niet.

Pagina: 1
Acties:

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Ik snap er helemaal niets meer van. Ik probeer een bestand om te vormen met sed, m.b.v. regular expressions, maar dit werkt alleen bij sommige regels, en bij andere ineens niet. Een voorbeeldje:

bronbestand:
code:
1
2
3
4
5
6
7
8
9
10
1:topic('736224','Feedback over de Frontpage - hoe en wat?','faqredl.gif','7','Veerboot','28609','0','2681','','','03-08-2005 20:43','0','1123094626','1123094626','25','1');
1:topic('210684','Feedback: Policy & FAQ','faqredl.gif','3','Breuls','725','1','13773','','','11-07-2003 11:45 - Breuls','11703712','1057916752','1034782637','25','1');
1:topic('818795','[FP] Centraal topic voor moderaties','red.gif','1','Snarf','37582','260','3123','','','09-03-2006 21:59 - EnderOnline','35894065','1141937947','1139917956','25','11');
1:topic('829027','40+ forum','red.gif','13','--Christiaan--','50691','39','326','','','09-03-2006 21:53 - Renesite','35893857','1141937612','1141935701','25','2');
1:topic('828926','Wanneer kan ik moderator worden ','red.gif','1','Meki','77727','90','1225','','','09-03-2006 21:09 - Sc0rPi0n','35892016','1141934971','1141921902','25','4');
1:topic('828368','Zeg Geqxon...','red.gif','9','Xebrozius','32346','122','4550','','','09-03-2006 20:47 - veldmuis','35891218','1141933630','1141820395','25','5');
1:topic('828596','lol wat een domme moddereter','red.gif','1','Del_Toro','132130','79','1535','','','09-03-2006 20:32 - kareltje_d...','35890634','1141932746','1141848175','25','4');
1:topic('825397','[FP] Centraal topic voor fouten','red.gif','1','Snarf','37582','45','600','','','09-03-2006 20:29 - Flem','35890505','1141932557','1141221808','25','2');
1:topic('787961','Ik begrijp dat de search_lite niet meer gewenst is?','red.gif','5','cyberstalker','104583','295','8512','','','09-03-2006 20:13 - qu63','35889884','1141931591','1133951372','25','12');
1:topic('828804','Bookmarks. Geweldig! ','red.gif','14','outcast_within','63613','22','411','','','09-03-2006 18:06 - SolidasRock','35885745','1141923983','1141904603','25','1');


Uitvoer:
code:
1
2
3
4
5
6
7
8
9
10
INSERT IGNORE INTO topics (id, forum, title, postIcon, userId, postTime) VALUES(736224, 1, 'Feedback over de Frontpage - hoe en wat?', X, X, X);faqredl.gif','7','Veerboot','28609','0','2681','','','03-08-2005 20:43','0','1123094626','1123094626','25','1');
1:topic('210684','Feedback: Policy & FAQ','faqredl.gif','3','Breuls','725','1','13773','','','11-07-2003 11:45 - Breuls','11703712','1057916752','1034782637','25','1');
1:topic('818795','[FP] Centraal topic voor moderaties','red.gif','1','Snarf','37582','260','3123','','','09-03-2006 21:59 - EnderOnline','35894065','1141937947','1139917956','25','11');
1:topic('829027','40+ forum','red.gif','13','--Christiaan--','50691','39','326','','','09-03-2006 21:53 - Renesite','35893857','1141937612','1141935701','25','2');
1:topic('828926','Wanneer kan ik moderator worden ','red.gif','1','Meki','77727','90','1225','','','09-03-2006 21:09 - Sc0rPi0n','35892016','1141934971','1141921902','25','4');
1:topic('828368','Zeg Geqxon...','red.gif','9','Xebrozius','32346','122','4550','','','09-03-2006 20:47 - veldmuis','35891218','1141933630','1141820395','25','5');
1:topic('828596','lol wat een domme moddereter','red.gif','1','Del_Toro','132130','79','1535','','','09-03-2006 20:32 - kareltje_d...','35890634','1141932746','1141848175','25','4');
1:topic('825397','[FP] Centraal topic voor fouten','red.gif','1','Snarf','37582','45','600','','','09-03-2006 20:29 - Flem','35890505','1141932557','1141221808','25','2');
INSERT IGNORE INTO topics (id, forum, title, postIcon, userId, postTime) VALUES(787961, 1, 'Ik begrijp dat de search_lite niet meer gewenst is?', X, X, X);red.gif','5','cyberstalker','104583','295','8512','','','09-03-2006 20:13 - qu63','35889884','1141931591','1133951372','25','12');
1:topic('828804','Bookmarks. Geweldig! ','red.gif','14','outcast_within','63613','22','411','','','09-03-2006 18:06 - SolidasRock','35885745','1141923983','1141904603','25','1');


De bedoeling is dat de uitvoer een kant en klaar sql-bestand gaat worden (de regex is uiteraard nog niet helemaal klaar). Ik gebruik de volgende opdracht.

code:
1
cat bronbestand | sed "s/\([0-9]*\):topic('\([0-9]*\)','\(.*?\)','/INSERT IGNORE INTO topics (id, forum, title, postIcon, userId, postTime) VALUES(\2, \1, '\3', X, X, X);/g" > update.sql


Het is natuurlijk duidelijk dat er in sommige regels een of ander teken zit dat de regex om zeep helpt. Maar ik kijk me suf, en ik zie het gewoon niet.

Ik ontken het bestaan van IE.


  • JeroenE
  • Registratie: Januari 2001
  • Niet online
code:
1
cat bronbestand | sed "s/\([0-9]*\):topic('\([0-9]*\)','\(.*?\)','/INSERT IGNORE INTO topics (id, forum, title, postIcon, userId, postTime) VALUES(\2, \1, '\3', X, X, X);/g" > update.sql
Volgens mij zit het probleem in het stukje "'\(.*?\)'". Je selecteert voor de vervanging nu alleen de regels waarvan de tekst tussen het tweede paar quotes eindigt op een vraagteken.

Dat zijn dus de regels met 'Feedback over de Frontpage - hoe en wat?' en 'Ik begrijp dat de search_lite niet meer gewenst is?'.

Als je het vraagteken weghaalt dan worden alle regels veranderd.

  • frim
  • Registratie: Augustus 2001
  • Niet online
Ja, je wilt met .*? de kortste match nemen, maar ik geloof dat sed dat niet ondersteunt. Wil je dat soort truukjes uithalen zul je naar een ander programma moeten kijken om regex onder te draaien, zoals perl.

Verwijderd

frim schreef op vrijdag 10 maart 2006 @ 13:23:
Ja, je wilt met .*? de kortste match nemen, blablablabla
Misschien kun je [^)]* gebruiken voor de kortste match.