[bash] Meerregelige output parsen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • EMP
  • Registratie: November 2000
  • Laatst online: 13:53

EMP

Krulloos!

Topicstarter
Op een Debian Jessie machine probeer ik de versie van de TPM chip uit te lezen.

De proprietary tool geeft met het volgende commando de volgende output:

TPMToolName -info

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  **********************************************************************
  *    <Manufacturer>  <TPMToolName>   Ver 01.23.4567.78               *
  **********************************************************************

       TPM information:
       ----------------
       Firmware valid                    :    Yes
       TPM family                        :    1.2
       TPM firmware version              :    4.42.121.0
       TPM enabled                       :    Yes
       TPM activated                     :    Yes
       TPM owner set                     :    No
       TPM deferred physical presence    :    No (Not settable)
       Remaining updates                 :    64


Ik probeer de family en de firmware versie uit te lezen in bash. Nu doe ik dat op de volgende manier:

Bash:
1
2
3
4
5
6
7
TPM_FAMILY=$(./TPMToolName -info | grep "TPM family" | tr -d '[:space:]')
CURRENT_TPM_FAMILY=${TPM_FAMILY##*:}  # retain the part after the last colon
echo "Found TPM family: ${CURRENT_TPM_FAMILY}"

TPM_FIRMWARE_VERSION=$(./TPMToolName -info | grep "TPM firmware version" | tr -d '[:space:]')
CURRENT_TPM_FIRMWARE_VERSION=${TPM_FIRMWARE_VERSION##*:}  # retain the part after the last colon
echo "Found TPM firmware version: ${CURRENT_TPM_FIRMWARE_VERSION}"


Dit werkt opzich wel, maar TPMToolName is nogal traag. Het liefste zou ik de output 1x genereren, en die tekst parsen, maar ik kom er niet helemaal uit.

Als ik de hele output in een variabele vang...
code:
1
TPM_INFO=$(./TPMToolName -info)

... dan verliest hij de line ends, en kan ik ook niet meer greppen.

Heeft iemand een idee hoe ik dit efficienter kan aanpakken dan twee maal de tool aanroepen?

Verbouwblog van mijn Schrootjespaleis uit 1925.
My anime addiction.


Acties:
  • +3 Henk 'm!

  • EMP
  • Registratie: November 2000
  • Laatst online: 13:53

EMP

Krulloos!

Topicstarter
Okee, toch te vroeg gevraagd.

De oplossing zit hem er in dat als je de variabele zonder quotes echo't (of aan grep geeft) dat de line ends dan wegvallen, maar met quotes geeft hij ze wel goed weer.

Bash:
1
2
3
4
5
6
7
8
9
10
TPM_INFO=$(./TPMToolName -info)


TPM_FAMILY=$(echo  "$TPM_INFO" -info | grep "TPM family" | tr -d '[:space:]')
CURRENT_TPM_FAMILY=${TPM_FAMILY##*:}  # retain the part after the last colon
echo "Found TPM family: ${CURRENT_TPM_FAMILY}"

TPM_FIRMWARE_VERSION=$(echo "$TPM_INFO" | grep "TPM firmware version" | tr -d '[:space:]')
CURRENT_TPM_FIRMWARE_VERSION=${TPM_FIRMWARE_VERSION##*:}  # retain the part after the last colon
echo "Found TPM firmware version: ${CURRENT_TPM_FIRMWARE_VERSION}"


Dit is het geworden, hopelijk heeft iemand anders er ooit ook iets aan 8)

Verbouwblog van mijn Schrootjespaleis uit 1925.
My anime addiction.


Acties:
  • +2 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Wellicht mosterd na de maaltijd maar dit is typisch iets dat je makkelijk met awk op kunt lossen.

Even uit mijn hoofd:
Bash:
1
CURRENT_TMP_FIRMWARE_VERSION = $(./TMPToolName -info | awk '/TMP firmware version/ { print $NF }')

Je matcht de regel en print het laatste "veld" (standaard beschouwt awk whitespace als een field delimiter)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:20

Creepy

Tactical Espionage Splatterer

En daarmee ook gelijk nog even een move naar Non-Windows Operating Systems

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney