← Back to team overview

sslug-teknik team mailing list archive

Re: Re: to sed problemer

 

Fredag 22 oktober 2004 13:38 kvad mikkel Meinike-Nielsen:
> Tak for de tre svar skønt at i vil hjelpe.
>
> Peter Makholm skrev:
> >Du mener forhåbentlig ikke plinger den vej?
>
> Jo det mente jeg faktisk, og det har også virket, men
> det er altså forkert. Det er den lille dims ' som sidder
> under * på tastaturet jeg skal bruger i stedet for så ikk´.

Jow.

> Johnny Ernst Nielsen skrev bla.(tak for den grundtige
>
> forklaring i øvrigt,):
> >Du må måske gå lidt mere i detaljer.
>
> Ja ja du har ret. Jeg vil gerne udskifte:
> <HTML>
> <HEAD>
> <TITLE>mimo event</TITLE>
> </HEAD>
>
> Med:
>
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
> <HTML>
> <HEAD>
> <TITLE>Event</TITLE>
> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
> <META NAME="author" CONTENT="Name">
> <META NAME="keywords" CONTENT="keyword keyword keyword">
> <META NAME="description" CONTENT="This is a document">
> <LINK REV="made" HREF="mailto:mimeini@xxxxxxxxxxxxx";>
> </HEAD>
>
> >Hvis du blot skal indsætte nogle faste linjer i stedet for de der
> > er, kan du gøre noget i stil med dette (ikke testet):
> >
> >#!/bin/bash
> >#Slet fra og med linje 1 til og med linjen der indeholder
> > HEAD-mærket.
> >
> >
> >sed -i '1,<\/HEAD>/d' fil.html
>
> Det er vel noget af det. Så kunne jeg istedet for at slette,
> erstatte med et ord f. eks "fnyt" og så i næste hug erstatte "fnyt"
> med de nye linier så er det bar spørgsmålet om den tekst som skal
> sætte ind må være så lang og indholde linieskift. Er det en
> realistsk mulighed.?

Ja, måske.
Det med at arbejde hen over flere linjer med sed har ofte voldt mig 
problemer, men noget jeg har fundet ud af er:

I erstatningsdelen af en s-kommando skal linjeskift angives helt 
bogstaveligt:

sed 's/Første linjeAnden linje/Første linje\
Anden linje/' filnavn

Altså en escape-backslash efterfulgt af et rigtigt ægte linjeskift.

I søgedelen kan man angive den gammelkendte linjeskiftkode '\n', men 
sådanne linjeskift vil ikke optræde med mindre man har bedt sed om at 
læse næste linje op bagved den nuværende. Og der stopper min viden, 
for der synes jeg det begynder at blive nemmere med andre værktøjer.
Og nej, jeg ved ikke hvorfor der skal være forskel på linjeskift i 
søgedelen og udskiftningsdelen.

Hvor lange strenge sed kan arbejde med skulle kun være begrænset af 
den fysiske hukommelse, så der løber du nok ikke ind i problemer.

Så du kunne måske slippe afsted må noget i stil med (ikke testet):

sed -i 's|<HTML>*.</HEAD>|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
3.2//EN">\
<HTML>\
<HEAD>\
<TITLE>Event</TITLE>\
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >\
<META NAME="author" CONTENT="Name">\
<META NAME="keywords" CONTENT="keyword keyword keyword">\
<META NAME="description" CONTENT="This is a document">\
<LINK REV="made" HREF="mailto:mimeini@xxxxxxxxxxxxx";>\
</HEAD>|' fil.html

Bemærk at jeg har udskiftet seds standard skillemærke '/' med '|', for 
at undgå at skulle undslippe en masse '/' med '\'

Hilsen Johnny :o)



References