Datei via BASH auslesen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von OSP-User, 07.11.2005.

  1. #1 OSP-User, 07.11.2005
    OSP-User

    OSP-User Eroberer

    Dabei seit:
    07.11.2005
    Beiträge:
    54
    Zustimmungen:
    0
    Hallo...

    also ich fang mal gleich munter an!
    Ich programmiere gerade an einer BASH Datei, die die "/proc/cpuinfo", die "/proc/meminfo" und noch einige andere auslesen soll.
    ich weiß, dass dies mit grep ohne weiteres möglich ist allesdings habe ich bisher nur die komplette Zeilen auslesen in der das gesuchte wort steht können.
    Da meines Wissen die cpuinfo immer gleich aufgebaut ist dachte ich mir jetzt ich könnte ja fest vorgeben, welche Zeile und ab welchem Zeichen er den Text übernehmen soll. Ich hoffe ihr versteht mich :think: und ich hab mich nicht zu kompliziert ausgedrückt.

    Nochmal in kurz: Ich will von der Datei /proc/cpuinfo die Zeile "model name" auslesen und suche einen befehl der dies macht. Der rausgezogene Wert (CPU name) soll dann in einer Textdatei abgespeichert werden.

    Vielen Dank für eure Bemühungen.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 lordlamer, 07.11.2005
    lordlamer

    lordlamer Haudegen

    Dabei seit:
    15.05.2003
    Beiträge:
    703
    Zustimmungen:
    0
    Ort:
    hamburg
    vielleicht lösbar mit awk
    man awk

    frank
     
  4. #3 ninguno, 07.11.2005
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    Code:
    grep "model name" /proc/cpuinfo | cut -d ":" -f 2
     
  5. #4 Wolfgang, 07.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    mit sed:
    sed -e '/^model name/!d;{s/.*:.//g;}' /proc/cpuinfo >zieldatei


    Gruß Wolfgang
     
  6. #5 OSP-User, 07.11.2005
    OSP-User

    OSP-User Eroberer

    Dabei seit:
    07.11.2005
    Beiträge:
    54
    Zustimmungen:
    0
    Super Leute ich glaube ich habe mich zurecht hierher verirrt!! :D

    Mit allen drei möglichkeiten hab ich es hinbekommen ... vielen vielen dank

    *great*
     
  7. #6 Wolfgang, 07.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Die vierte Möglichkeit wär dann noch das nicht zu vergessende perl. ;)
    perl -naF":\s" -e '(/^model name/g)?print$F[1]:1' /proc/cpuinfo >zieldatei

    :D :D :D :D
    Gruß Wolfgang
     
  8. #7 OSP-User, 07.11.2005
    OSP-User

    OSP-User Eroberer

    Dabei seit:
    07.11.2005
    Beiträge:
    54
    Zustimmungen:
    0
    Hallo hallo bin wieder da mit ner dummen Frage *g*
    Also hier mein Codeschnipsel
    Code:
     
    {
       for i in $ir; do
          Bearbeitet=$Bearbeitet+1
          echo $(($Bearbeitet * 100 / $Anzahl))
          sed -e '/^model name/!d;{s/.*:.//g;}' $i >> etc/tmp.txt
    	#Überprüft gefundene Dateien auf den Eintrag "model name"
          sed -e '/^vendor_id/!d;{s/.*:.//g;}' $i >> etc/tmp.txt
    	#Überprüft gefundene Dateien auf den Eintrag "vendor_id"
       done
    } | dialog --gauge "Überprüfe Hardware..." 6 40 0
    Ich denke mal ich muss euch nicht erklären was der macht !! :))

    nun haut das auch super hin ... naja fast ... ich hätte gerne noch, dass ich einen Wert angeben kann, der dann vor das ausgelesenen geschrieben wird (um das alles noch komplizierter zu machen... später will ich das noch in HTML schreiben damit man nen Testbericht hat *g* ... aber das später ;) )
    so wie gesagt ich wollte das vor dem Prozessor noch "Prozessor: " steht usw.
    also hab ich mir das so gedacht.

    Code:
     {
       for i in $ir; do
          Bearbeitet=$Bearbeitet+1
          echo $(($Bearbeitet * 100 / $Anzahl))
          sed -e '/^model name/!d;{s/.*:.//g;}'[color=red]"Prozessor: "$i[/color] >> etc/tmp.txt
    	#Überprüft gefundene Dateien auf den Eintrag "model name"
          sed -e '/^vendor_id/!d;{s/.*:.//g;}'[color=red]"Hersteller: "$i[/color] >> etc/tmp.txt
    	#Überprüft gefundene Dateien auf den Eintrag "vendor_id"
       done
    } | dialog --gauge "Überprüfe Hardware..." 6 40 0
    
    Ja aber das funktioniert gar nicht *noahnung*. hat einer ne Idee?

    Ich kann nicht echo "Hersteller: " >> etc/tmp.txt vorschreiben weil es das dann verdammt oft hinschreibt! ist ne art schleife.

    Also hat einer ne Idee?
     
  9. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Code:
    ...
    echo "Prozessor: " $(sed -e '/^model name/!d;{s/.*:.//g;}'$i) >> etc/tmp.txt
    ...
    
    Gruss, Phorus
     
  10. #9 Wolfgang, 07.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ja ich habe eine Idee:

    ..
    sed -e '/^model name/!d;{s/.*:./Prozessor: /g;}'$i >> etc/tmp.txt
    ...

    Zweite Ersetzung und folgende dann entsprechend dto.

    Aber wenn du das als html planst, ist perl eventuell gleich die bessere Lösung.

    Gruß Wolfgang
     
  11. #10 OSP-User, 07.11.2005
    OSP-User

    OSP-User Eroberer

    Dabei seit:
    07.11.2005
    Beiträge:
    54
    Zustimmungen:
    0
    Bei PEARL bin aber noch dümmer!!:hilfe2: da hab ich nu wirklich keinen plan von!
     
  12. #11 OSP-User, 07.11.2005
    OSP-User

    OSP-User Eroberer

    Dabei seit:
    07.11.2005
    Beiträge:
    54
    Zustimmungen:
    0
    sed -e '/^model name/!d;{s/.*:./Prozessor: /g;}'$i >> etc/tmp.txt

    wolfgang_1

    wäre es vielleicht möglich, dass du mir kurz mal den Befehl aufschlüsselst ?

    quasi welche Option sagt was aus ? Im Internet hab ich bisher noch nichts dazu gefunden? *blödes google*

    danke
     
  13. #12 Wolfgang, 07.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Eine recht gute Einführung findest du hier->
    http://www-128.ibm.com/developerworks/linux/library/l-sed1.html

    Kurz zu diesem Einzeiler:
    sed -e '/^model name/!d;{s/.*:./Prozessor: /g;}'

    - Lies von der STDIN

    - führe den Code zwischen den ['] aus. -> Option -e

    Lösche Alles was nicht auf den Regulären Ausdruck /^model name/ passt -> !d;
    Der Regexp sucht hier nach einer Zeichenfolge am Anfang der Zeile ^

    Was in den geschweiften Klammern steht, wird nun auf den verbliebenen Rest angewendet.
    Der Rest ist genau die noch komplette Zeile die wir suchen.
    Also so wie sie uns auch grep liefern würde.

    s/.*:.//g;
    Ersetzt alles in dieser Zeile, was:

    irgend ein Zeichen (ausser Newline) einmal oder unendlich vielmal vorkommend,
    gefolgt von einem Doppelpunkt,
    gefolgt von noch einem Zeichen (hier unser Leerzeichen)

    durch Nichts. Also simples Löschen.

    Damit bleibt alles was nach dem Doppelpunkt Leerzeichen Steht übrig.

    s/.*:./Prozessor: /g;

    Im Zweiten Fall ersetze ich das eben nicht durch Nichts, sondern deinen gewünschten String Prozessor :, der damit vor der CPU Angabe landet.

    Hoffe verständlich gewesen zu sein.
    Reguläre Ausdrücke sind unter *nix sehr nützlich.

    Gruß Wolfgang

    PS Das g bedeutet, auf die gesamte Zeile anwenden.
     
  14. #13 OSP-User, 07.11.2005
    OSP-User

    OSP-User Eroberer

    Dabei seit:
    07.11.2005
    Beiträge:
    54
    Zustimmungen:
    0
    Danke sehr Wolfgang ... jetzt hab selbst ich das verstanden :D
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 OSP-User, 17.11.2005
    OSP-User

    OSP-User Eroberer

    Dabei seit:
    07.11.2005
    Beiträge:
    54
    Zustimmungen:
    0
    Hey Leute ... hab nochmal ne Frage.

    So ich möchte mit folgendem Befehl den Cache (NUR die Zahl) des Optical auslesen.
    Code:
    dmesg | grep hdd
    Leider spuckt er mir dort viel zu viel aus und ich will die ausgabe jetzt nur auf die Zahl begrenzen!

    Ist das möglich und wenn ja ... wie?:think:

    Danke für eure Bemühungen :D
     
  17. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Hilfe zur Selbsthilfe:

    Code:
    man bash
    man grep
    man sed
    man awk
    man cut
    
    Gruss, Phorus
     
Thema: Datei via BASH auslesen
Besucher kamen mit folgenden Suchen
  1. bash cpuinfo auslesen

Die Seite wird geladen...

Datei via BASH auslesen - Ähnliche Themen

  1. MAKE ? JPG Dateien per Bash Skript bearbeiten

    MAKE ? JPG Dateien per Bash Skript bearbeiten: Moin Gemeinde, kann ich sicherstellen das Dateien in einem Verzeichnis trotz stündlicher Abarbeitung nur einmal bearbeitet werden. Ausnahme Neue...
  2. Bash - Zwei Binärdateien vergleichen (SQL Diff)

    Bash - Zwei Binärdateien vergleichen (SQL Diff): Moin, versuche zwei SQL Dumps miteinander zu vergleichen, dazu hole ich Stammdaten aus der MSSQL-DB und speichere sie direkt unter der Bash in...
  3. FTP-Dateien per Remote löschen (bash)

    FTP-Dateien per Remote löschen (bash): Hallo, ich habe ein Shell-Script (bash), welches per wget Bilder von einem FTP-Server läd. Diese können aber nicht per wget --delete-after...
  4. Bash enscript mit mehreren Ordnern und Dateien

    Bash enscript mit mehreren Ordnern und Dateien: Hallo, Ich habe eine Ordner mit Unterordner in dem sich je mehrere verschiedenbenannte .java-Dateien befinden. Der Code: enscript -2rG...
  5. Hilfe bei bash - Shellscript gesucht: zusammengehörende Strings in Konfigdatei

    Hilfe bei bash - Shellscript gesucht: zusammengehörende Strings in Konfigdatei: Hallo zusammen, bin leider noch kein Skript-Guru, das folgende Problem wird wohl sehr in die Tiefen von substr, split, regulären Ausdrücken...