Permalänk

Lite hjälp med sed

Sitter här och klurar på sed, och inser att jag behöver lite hjälp.

Jag har följande standard input till sed:

|/dev/sdd|WDC WD5000ABYS-01TNA0|34|C||/dev/sde|WDC WD5000ABYS-01TNA0|31|C||/dev/sdf|WDC WD360ADFD-00NLR4|21|C||/dev/sdg|WDC WD5000ABYS-01TNA0|30|C||/dev/sdh|WDC WD5000ABYS-01TNA0|33|C||/dev/sdi|WDC WD5000ABYS-01TNA0|31|C|

Jag vill göra följande:

  • Ta bort alla pipes ur texten.

  • Infoga ett kolon samt en ny rad efter varje /dev/sdx.

  • Trimma bort allt mellan hårddiskinformationen och temperaturen (innan C).

  • Infoga en ny rad samt en tom rad efter varje C, vilket kommer efter temperaturen.

Jag kan hantera grunderna i sed, dvs. att byta ut en del av input mot något annat, så ge gärna tips så att jag kan lösa problemet själv.

Tackar på förhand!

Visa signatur

There is a Swedish conspiracy.
http://forum.theswedishconspiracy.com

Permalänk
Medlem

perl -p -e 's/\|\|/\n/g' | sed -e 's_.*\(/dev/.*\)|.*|\([0-9][0-9]\).*_\1 \2_'

Förstår inte hur man får in en ny rad med sed, så den biten fick bli perl

EDIT: detta ger dig:
/dev/sdd 34
/dev/sde 31
/dev/sdf 21
/dev/sdg 30
/dev/sdh 33
/dev/sdi 31

Permalänk

Åh, jag måste tacka så hemskt mycket!

[EDIT:]
Några tips på något jag kan läsa i bokform för att bli trollkarl på bland annat sed?

Visa signatur

There is a Swedish conspiracy.
http://forum.theswedishconspiracy.com

Permalänk
Medlem

Ytterligare en variant:

sed -e 's,^|,,' -e 's,|$,,' -e 's,||,\ ,g' |sed -e 's,^\([^|]\+\)|[^|]\+|\([0-9]\+\)|C$,\1 \2,'

Observera den escape:ade radbrytningen.

Vidare tycker jag att perl lämpar sig bättre för den här typen av textbehandling:

perl -n -e 's,^\|(.*)\|$,\1,g; foreach (split /\|\|/) {($dev,undef,$temp,undef) = split /\|/; print $dev . " " . $temp . "\n"};'

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av bjr
Observera den escape:ade radbrytningen.

Jag kom på det själv också efter ett tag.

Permalänk
Medlem

Är inge vidare på sed själv men följande lilla dokument har hjälpt mig ibland.
http://www.student.northpark.edu/pemente/sed/sed1line.txt

Visa signatur

01001000 01100001 01110010 00100000 01100100 01110101 00100000 01110100 01110010 10000110 01101011 01101001 01100111 01110100 00111111 00100000 00111010 00101001