sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #91525
sed-regexp bøvl med at gentage søg-erstat i en linje
Jeg havde en korrupt /etc/group fil i dag, som havde været igennem en
margen-justering, dvs. flere korte linjer var rykket sammen på en så de
omtrent var 80 tegn i bredden. Således:
daemon:x:2:root,bin,daemon,cyrus,bacula sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon tty:x:5: disk:x:6:root lp:x:7:daemon,lp mem:x:8:
Til det formål forsøgte jeg at få sed til at hjælpe med følgende
regexp-besværgelse:
sed -re 's/([a-z0-9]+:x:[0-9]+:[a-z0-9,]*)( )([#a-z0-9]+)/\1\n\3/g'
Til min overraskelse giver det resultatet:
daemon:x:2:root,bin,daemon,cyrus,bacula
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5: disk:x:6:root
lp:x:7:daemon,lp mem:x:8:
-altså linje 2 i input bliver til 3 linjer á 1 hhv. 2 grupper i output.
Hvorfor ikke 5 linjer á 1 gruppe, som tilsigtet - og når det nu ikke
funker, hvorfor så heller ikke 4 linjer á hhv. 1 og 4 grupper (som jeg
ville synes var mere logisk).
Jeg har forstået at /g optionen til s/ funktionen gør at alle tilfælde
af søgemønsteret i linjen skulle matches, men er der noget med at man
skal nulstille en token-tæller eller noget i den dur?
Mvh
Kenneth
Follow ups