sed problem, hur bli av med newlines?

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Botkyrka
  • 2007-04-06 19:24

jag sitter och försöker parsa kommandot uprecords som man får genom att installera uptimed med MacPorts. Det har en ganska säregen output nämligen:

#               Uptime | System                                    Boot up 
----------------------------+-------------------------------------------------
->   1    16 days, 17:40:34 | Darwin 8.9.1             Wed Mar 21 00:36:28 2007
----------------------------+-------------------------------------------------

jag är bara ute efter biten "16 days, 17:40:34" som jag har lyckats parsa till "16 days, 17 hours, 40 minutes" med kommandot:

uprecords | awk {'print $3" "$4" "$5'} | sed -e 's/| System Boot/  /' -e 'd/\n//' -e 's/:/ hours, /' -e 's/:/ minutes /' | awk {'print $1" "$2" "$3" "$4" "$5" "$6'}

där deletekommandot: "-e 'd/\n//'" eller alternativa substitutionskommandot: "-e 's/\n//'" inte funkar. hela harangen tar nämligen med grejer som ligger 3 rader över den output som är relevant pga den muppiga originalutskriften. Om jag inte tar med "-e 's/| System Boot/ /'" biten så står det "| System Boot" 3 rader över 16 days. "-e 's/| System Boot/ /'" kommandot fungerar och tar bort texten men hur jag än försöker så blir jag inte av med alla extra radbrytningar. Outputen har 3 extra rader över sig och 1 under sig som jag vill ta bort. Någon som har några tips?

  • Medlem
  • Stockholm
  • 2007-04-06 22:14
uprecords |  grep ^-\> | awk {'print $3" "$4" "$5'}

gör det som du vill utan 14mil sed byten som inte behövs..

  • Medlem
  • Varberg
  • 2007-04-06 22:19

Är du bara ute efter den aktuella uptimen, dvs raden med "->" först på raden?

Isåfall kan du ju begränsa outputen betydligt genom bara:

uprecords | grep "^->"

Och sedan köra vidare med sed.

  • Medlem
  • Botkyrka
  • 2007-04-10 20:34

grep löste problemet. men j!#%& geektool tar inte uprecords av nån anledning. antar att det är eftersom det inte är ett originalkommando eller nåt sånt korkat.

  • Medlem
  • Stockholm
  • 2007-04-10 21:41

låter som om du inte har den i pathen eller liknande, måste du skriva /path/to/uprecords eller står du i mappen som du har programmet i då du skriver?

testa cd / ; uprecords

funkar det är det i pathen, funkar det inte är det inte, antingen får du lägga till den i PATH variabeln för din dator eller så flytta den till en plats som är med i path som ex /usr/local/bin eller annan mapp beroende på vad du har..

1
Bevaka tråden