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?