Datei in shellscript Zeilenweise einlesen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Schwedeii, 19.07.2009.

  1. #1 Schwedeii, 19.07.2009
    Schwedeii

    Schwedeii Tripel-As

    Dabei seit:
    09.01.2006
    Beiträge:
    208
    Zustimmungen:
    0
    Eine Frage an die Linux-Gemeinde:
    Wie kann ich in einem Bash-Script eine Datei Zeilenweise einlesen und das Ergebnis als Parameter übergeben lassen?

    Nach dem Motto

    i=1
    while [ $i <>0 ]
    do
    Datei öffnen und Zeile i einlesen
    if eof then i=-1
    fi
    Verarbeite Zeile
    let i=$i+1
    done


    So oder in der Art will ich es gestalten.
     
  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 HeadCrash, 19.07.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
  4. #3 Always-Godlike, 19.07.2009
    Always-Godlike

    Always-Godlike Das Freak

    Dabei seit:
    31.12.2006
    Beiträge:
    939
    Zustimmungen:
    0
    Ort:
    Saarland
    Ich versteh irgendwie nicht, warum du es so kompliziert machst.
    Suchmaschine -> "bash datei zeilenweise" -> Erste paar Treffer anschauen

    Einfache Lösungen:
    Code:
    #Einzeiler
    cat /pfad/zu/datei | while read line; do echo $line; done;
    
    #Mehrzeiler
    while read line
    do
        echo $line
    done < /pfad/zu/datei
    Gruß Always-Godlike
     
  5. #4 caba_, 19.07.2009
    Zuletzt bearbeitet: 19.07.2009
    caba_

    caba_ (caba{_,}|manuw)

    Dabei seit:
    07.08.2007
    Beiträge:
    334
    Zustimmungen:
    0
    Ich benutze das prinzip um Songs aus einer Playliste auf mein Handy zu speichern:
    Dateien aus einer Dateiliste kopieren:
    Code:
    a) for i in $(cat playlist.pl); do cp ${i} /mnt/Music/mp3/; done
    b) while read i; do cp "${i}" /mnt/Music/mp3/; done < playlist.pl
    
    wobei "playlist.pl" so aussieht:
    Code:
    /path/to/file1.mp3
    /path/to/file2.mp3
    /path/to/file3.mp3
    
    Also ich denke das es das ist was du willst?

    Lg Manuel
     
  6. #5 Schwedeii, 19.07.2009
    Schwedeii

    Schwedeii Tripel-As

    Dabei seit:
    09.01.2006
    Beiträge:
    208
    Zustimmungen:
    0
    okay, ganz einfach, ich will die Daten aus einer *.m3u Playlist mit mpg123 abspielen lassen. Der Hintergrund ist der, dass ich den Rechner als mp3-Player eine Liste abspielen lassen will und am Anschluss soll er sich herunterfahren. In einem Script eben.
     
  7. #6 caba_, 19.07.2009
    Zuletzt bearbeitet: 19.07.2009
    caba_

    caba_ (caba{_,}|manuw)

    Dabei seit:
    07.08.2007
    Beiträge:
    334
    Zustimmungen:
    0
    Haja, kannst doch genau so benutzen. grep dir halt vorher den Pfad raus.
     
  8. T-One

    T-One Routinier

    Dabei seit:
    14.10.2008
    Beiträge:
    478
    Zustimmungen:
    3
    Ort:
    Österreich
    Code:
    # Setzen des Fieldseperators auf eine neue Zeile
    IFS="
    "
    # Loop durch die Datei
    for line in `cat /tmp/files`;do
    # Echo line (echo kann jeder Befehl sein den du willst)
     echo $line
    done
    
     
  9. #8 Schwedeii, 20.07.2009
    Schwedeii

    Schwedeii Tripel-As

    Dabei seit:
    09.01.2006
    Beiträge:
    208
    Zustimmungen:
    0
    Das hat schon erst mal gut funktioniert. Leider speichert die *.m3u Liste in folgendem Format:
    #EXTM3U
    #EXTINF:68,Willkommen - Schiller
    /media/disk/Schiller/101-Willkommen.mp3
    #EXTINF:249,Herzschlag - Schiller
    /media/disk/Schiller/102-Herzschlag.mp3
    #EXTINF:236,Denn wer liebt (mit Anna Maria Muehe) - Schiller
    /media/disk/Schiller/103-Denn_wer_liebt_(mit_Anna_Maria_Muehe).mp3

    Also muss ich die Zeile so auswerten, dass nur die Zeilen, die nicht mit einer Raute anfangen auch abgespielt werden... Wie macht man sowas? ich muss hier noch viel lernen...
     
  10. #9 daboss, 20.07.2009
    Zuletzt bearbeitet: 20.07.2009
    daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    In Anlehnung an diesen Thread vor kurzem:

    Ersetze das
    Code:
    echo $line
    aus T-One's Vorschlag z.Bsp. durch

    Code:
    if [ $(echo "$line" | grep ^[/]) ]; then
     #doit
    fi;
    
    und es sollten nur Zeilen abgearbeitet werden, die mit / anfangen.
     
  11. #10 Schwedeii, 20.07.2009
    Schwedeii

    Schwedeii Tripel-As

    Dabei seit:
    09.01.2006
    Beiträge:
    208
    Zustimmungen:
    0
    Auch interessant, ich habe es aber nach googeln auch hingekriegt und zwar so:

    case "$line" in
    "#"*) echo $line ;;
    *) echo "spiele " $line
    mpg123 $line ;;
    esac

    Danke für Eure Hilfe.
     
  12. #11 cognitiv, 22.07.2009
    cognitiv

    cognitiv Grünschnabel

    Dabei seit:
    22.07.2009
    Beiträge:
    3
    Zustimmungen:
    0
    Oder umgekehrt die, die nicht mit einem # beginnen, es täte dann auch ein
    echo $line | grep -v "^#"
     
  13. daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Oder
    Code:
     grep ^[^#]
    statt dem Schalter... (Aber ungetestet)

    (^ vor der Klammer für Zeilenanfang, ^ vor dem Zeichen für "Nicht das Zeichen")
     
  14. #13 Schwedeii, 23.07.2009
    Schwedeii

    Schwedeii Tripel-As

    Dabei seit:
    09.01.2006
    Beiträge:
    208
    Zustimmungen:
    0
    Naja, das kling gut und schön, aber die Programmierung sollte weitergehen. M3u Dateien können auch andere Media-Files enthalten. mpg123 kann diese aber nicht wiedergeben. Ich hab das so gelöst:
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 Schwedeii, 24.07.2009
    Schwedeii

    Schwedeii Tripel-As

    Dabei seit:
    09.01.2006
    Beiträge:
    208
    Zustimmungen:
    0
    So, der nächste Schritt war, über eine Dialogbox den Namen der Playlist einzugeben. das funktioniert auch ganz gut, nur wird das Ziel in /etc/dream/playlist auch dann überschrieben (der Datensatz wird gelöscht) wenn ich auf abbrechen klicke. Was mache ich falsch?
    Hier das Listing:
     
  17. #15 bytepool, 24.07.2009
    Zuletzt bearbeitet: 24.07.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,
    du leitest den output von
    Code:
    dialog --inputbox "Bitte Playlist eingeben" 0 0 2> /etc/dream/playlist
    
    bedingunglos nach /etc/dream/playlist um. D.h. auch wenn dialog keinen output hat, wird die alte Datei ueberschrieben und neu angelegt.
    Du solltest den output lieber in eine Variable schreiben, und die Datei erst schreiben, wenn dialog erfolgreich ausgefuehrt wurde (test auf $?).

    <edit>
    Ah, ich sehe gerade dass dialog die Ausgabe auf stderr legt, wie du in deinem Skript ja auch richtig geschrieben hast. Ich weiss gar nicht ob man stderr mit einer Variable einfangen kann. Du kannst aber genauso gut natuerlich erstmal eine temporaere Datei benutzen.
    </edit>

    Aber bist du dir sicher, dass du nach /etc/ schreiben willst? Das sieht mir stark nach einer benutzerabhaengigen Einstellung aus, dann solltest du das lieber in ~/.dream/playlist schreiben...

    Nebenbei, wenn du statt Zitat Bloecken Code Bloecke benutzt, bleiben auch die Einrueckungen des Codes erhalten.

    mfg,
    bytepool
     
Thema: Datei in shellscript Zeilenweise einlesen
Besucher kamen mit folgenden Suchen
  1. bash datei zeilenweise einlesen

    ,
  2. bash parameter aus datei einlesen

    ,
  3. unix datei zeilenweise einlesen

    ,
  4. bash script datei zeilenweise einlesen,
  5. bash Zeilen aus Datei lesen,
  6. Shell Zeilen auslesen aus textdatei raspberry,
  7. unix files auslesen,
  8. datei sequentiell anlegen shell script,
  9. shellscript datei zeilenweise einlesen,
  10. unix file einlesen,
  11. im script dateien einlesen,
  12. bash shellscript aus einer datei lesen,
  13. datei mot shell lesen,
  14. linux schleife jede zeile aus datei lesen,
  15. linux datei zeilenweise,
  16. linux bash datei öffnen und zeilenweise durchgehen,
  17. bash parameter aus file auslesen,
  18. unix daten einlesen,
  19. raspberry bash textdatei zeilenweise abarbeiten,
  20. linux zeile für zeile lesen,
  21. bash einlesen,
  22. linux script ping zeile aus datei,
  23. file einlesen variablen shell bash,
  24. die ersten 100 datensätze lesen unix,
  25. linux terminal datei zeilenweise aulsesn
Die Seite wird geladen...

Datei in shellscript Zeilenweise einlesen - Ähnliche Themen

  1. Shellscript unerwartetes Dateiende

    Shellscript unerwartetes Dateiende: Hallo zusammen, folgendes Script führe ich in einer .bat via cygwin und curl aus. Beim Ausführen erhalte ich die einen Syntaxfehler:...
  2. Einfaches Shellscript - dateinamen ändern

    Einfaches Shellscript - dateinamen ändern: Hey, kann mir jemand vielleicht bei diesem miniscript helfen? ich habe dateien die folgendermaßen aussehen MM-DD-YY-dateiname und...
  3. 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...
  4. Shellscript -> Dateinamen

    Shellscript -> Dateinamen: Hallo ich bin gerade dabei mich in die Shellprogrammierung einzuarbeiten und es klappt auch so halbwegs. Nur stehe ich jetzt vor einem Problem...
  5. User sollen Dateien speichern und ändern, aber nicht neu anlegen dürfen

    User sollen Dateien speichern und ändern, aber nicht neu anlegen dürfen: Hallo liebe Helfer, welche Einstellungen muss ich in der smb.conf bzw. unter Linux vornehmen, damit User vorhandene Dateien öffnen und speichern...