[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [NOVICE] slette [] med sed ??



Kasper Edwards wrote:
> Hvordan for man sed til at slette et ord i klammer som: [TEST] ??
> Forsøg som:
> sed s/TEST// minfil.log
>         virker men [] bliver tilbage
Yeps. s/TEST// betyder at første gang sed møder sekvensen TEST
af karaktere så skal den slette dem.
 
> sed s/[TEST]// minfil.log
>         får sed til at slettet det første T så der står [ETS]

Det skyldes at [TEST] betyder ikke betyder sekvensen af karaktere
[TEST] men fortolkes, som ET bogstav i mængden 'T','E','S' eller 'T'.
Sed substituere det første karakter i [..] med en tom streng.
Derfor forsvinder T'et. Og [EST] udskrives.

Det sidste T i [TEST] er ligegyldigt.

Et altenativ 
sed s/[TES]{4}// minfil.log

Betyder at strengen bestående 4 på hinanden følgende karaktere, 
hvor alle karaktere er i mængden 'T','E','S' slettes.

> sed s/[]// minfil.log
>         Giver en fejl
Ja. Fordi [] betyder en udefineret karakter, det er den tomme mængde
af karaktere, og du kan ikke matche den med en streng.

Svaret er:

s/\[TEST\]//g   for at fjerne alle strenge "[TEST]"
(g = gentag substitution)

s/\[[^\]]*\]//g for at fjerne alle strenge af formen [...]

  \]   betyder karakteren ']'
[^\]]  betyder enhver karakter der IKKE er ']'.
[^\]]* betyder en sekvens af karaktere der ikke er ']'

\[ .. \] betyder en streng der starter og slutter med '[' og ']' 

og
\[[^\]]*\] betyder en streng der starter og slutter med '[' og ']'
           og hvor indholdet er en streng der IKKE indeholder ']'.

Det er bedre at bruge [^\]] end . fordi * er en grådig operator.
(se man perlre for grådige operatorer)

Har du følgende streng "hej1 [TEST] hej2 [TEST] hej3" så vil 

s/\[[^\]]*\]//g returnere "hej1  hej2  hej3", mens
s/\[.*\]//g      returnere "hej1  hej3"

.* er grådig og vil derfor finde den længste streng der matcher
og det er "TEST] hej2 [TEST" og ikke to gange "TEST".

Alternativt
s/\[[A-Z]*\]//g der sletter alle [..] hvor indmaden KUN er store
bogstaver.

s/\[[A-Z]{3,6}\]//g der sletter alle [..] hvor indmaden KUN er en
sekvens
af 3,4,5 eller 6 store bogstaver efter hinanden.

-- 
	Sometimes it's better to light a       Carsten Svaneborg
      flamethrower than curse the darkness.      sslug@sslug
	-- (Terry Pratchett, Men At Arms)    Fight Bill - use Linux


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:59 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *