bash script - string edit

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von hakkinen, 03.09.2007.

  1. #1 hakkinen, 03.09.2007
    hakkinen

    hakkinen Grünschnabel

    Dabei seit:
    03.09.2007
    Beiträge:
    2
    Zustimmungen:
    0
    Hi Forum

    ich knabbere schon ettliche Stunden an folgendem Problem:
    Folgender Dateiinhalt soll so zusammengesetzt werden, daß jede einzelne Zeile mittels Variable an einen Befehl weitergegeben werden kann.
    Vorab schon mal danke fürs helfen: Danke!

    z.B.
    str=ABC100_1006_CW32_Upper_02.02.00
    oder z.B.
    str=XYZ310_1006_CW28

    ------------------------------------------------
    Location Prases:
    XYZ300_1006_CW22 (1.5)
    ABC100_1006_CW22_001 (1.6)
    XYZ310_1006_CW28 (1.8)
    LMN750_3007_CW52 (9.8)
    ABC100_1006_CW32_Upper_02.02.00 (1.6.1.3)
    XYZ310_1006_CW32_C05_02.00.00 (1.8.1.2)
    -------------------------------------------------

    Mein Versuch :-((
    ------------------------------
    #!/bin/bash
    str1=" CBB100_5004_CW37_C11_02.03.00 (1.6.1.4)"
    str2=${str#*(}
    echo $str2
    len1='expr length $str1
    echo $len1
    len2='expr length $str2'
    len3='expr $len1-$len2'
    x=$(str1:4:len3)
    echo $x
    ------------------------------
     
  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 Wolfgang, 03.09.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Sorry, aber ich kann beim besten Willen nicht nachvollziehen, was du eigentlich willst.
    Gib bitte nochmal eine Datenprobe, und was du daraus filtern willst.
    Was dein Scriptversuch da machen will, erschließt sich mir beim besten Willen nicht.
    Um eine Datei zeilenweise zu verarbeiten, gibt es etliche Möglichkeiten in der Shell.
    Vom einfachen grep über read bis zu sed, awk und Perl.

    Gruß Wolfgang
    PS Versuch bitte nochmal dein Problem genau zu analysieren. Oft hilft das sogar für eine eigene Lösung.
     
  4. mcas

    mcas Routinier

    Dabei seit:
    29.12.2005
    Beiträge:
    398
    Zustimmungen:
    0
    Also ich habs so verstanden, dass er die Datei zeilenweise einlesen möchte und den Zeileninhalt an einen Befehl übergeben.
    Was das Skript allerdings machen soll erschließt sich mir auch nicht.
     
  5. #4 Wolfgang, 03.09.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Also eine Datei zeilenweise lesen geht ja einfach mit while read.
    Code:
    while read $zeile;
     do
    echo $zeile
    # do some with $zeile
    done <inputdatei
    
    Gruß Wolfgang
     
  6. #5 b3ll3roph0n, 04.09.2007
    b3ll3roph0n

    b3ll3roph0n Tripel-As

    Dabei seit:
    13.07.2007
    Beiträge:
    160
    Zustimmungen:
    0
    Du willst jede Zeile der Datei in eine Variable einlesen?

    Code:
    #!/bin/sh
    
    parsefile () {
      awk '
        function p(varname,val)
          { printf "%s=\"%s\"\n",varname,val }
        BEGIN { FS = " = "; i = "0" }
        !/^Location/ { p("STR["i++"]", $0); }
        END { p("LIMIT", i) }
      ' < ./test.txt
    };
    
    eval $(parsefile);
    
    for (( i=0; i < LIMIT; i++ )); do
      echo "${STR[$i]}";
    done;
    (ungetestet!)
     
  7. #6 hakkinen, 04.09.2007
    hakkinen

    hakkinen Grünschnabel

    Dabei seit:
    03.09.2007
    Beiträge:
    2
    Zustimmungen:
    0
    Mhh... erst mal danke für die versuche mich zu verstehen :-)
    Also mein Problem!
    Datei mit folgendem Inhalt:
    -----------------------------
    XYZ300_1006_CW22 (1.5)
    ABC100_1006_CW22_001 (1.6)
    XYZ310_1006_CW28 (1.7)
    LMN750_3007_CW52 (9.7)
    ABC100_1006_CW32_Upper_02.02.00 (1.6.1.3)
    XYZ310_1006_CW32_C05_02.00.00 (1.8.1.2)
    --------------------------------------------
    davon möchte ich die Klammern incl. Klammerninhalt weghaben!

    Gruß hakkinen
     
  8. #7 angelsfall, 04.09.2007
    Zuletzt bearbeitet: 04.09.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    Huch, das is ja ganz was anderes ...

    Code:
    sed -i 's% (.*)$%%' datei.txt
    
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Geht nur mit dem GNU sed und beim BSD sed mit -i""

    dot star (.*) sollte man generell meiden und nen anderen delimiter % brauchst du hier auch nicht.
    http://www.perlmonks.org/index.pl?node_id=24640

    Code:
    sed 's/([^)]+)//' < oldfile.txt > newfile.txt
    oder eben wenn vorhanden mit dem -i Switch
    Code:
    sed -i 's/([^)]+)//' datei.txt
     
  11. #9 Fallout, 04.09.2007
    Zuletzt bearbeitet: 04.09.2007
    Fallout

    Fallout Doppel-As

    Dabei seit:
    02.03.2007
    Beiträge:
    120
    Zustimmungen:
    0
    Hi,

    Falls Du doch noch bei Deiner Variablen-Methode bleiben möchtest, wäre mein Vorschlag z. B.:

    Code:
    unset counter
    while read information rest; do
     (( counter++ ))
     str[$counter]="$information"
    done < /path/to/inputfile
    echo "Variablen str[1-$counter] gesetzt."
    
     ### Zur Ueberpruefung Ausgabe der Variablen:
    for (( newcounter=1; newcounter<=$counter; newcounter++ )); do
     echo "str[$newcounter]=\"${str[$newcounter]}\""
    done
    Der obere Teil zählt mit jeder vorkommenden Zeile hoch und verwendet dies als Nummerierung der fortlaufenden Variable str[...]. Der jeweiligen Variable wird dann der Wert des ersten mittels read ermittelten Zeilenabschnittes der jeweiligen Zeile zugewiesen.

    Gruß Daniel
     
Thema:

bash script - string edit

Die Seite wird geladen...

bash script - string edit - Ähnliche Themen

  1. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  2. Bashscript aus Debian6 läuft nicht auf Debian7

    Bashscript aus Debian6 läuft nicht auf Debian7: Hallo an alle, nachdem ich ein Skript von squeeze auf wheezy kopiert habe und ausführte, erschienen gleich wilde Fehlermeldungen, nach denen ich...
  3. 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...
  4. USB Geräte per Bash Script resetten (Gerät hängt sich öfter mal auf)

    USB Geräte per Bash Script resetten (Gerät hängt sich öfter mal auf): Hallo. Ich habe eine USB Netzwerkkarte an einem Linux Router System. (LogiLink mit MosChio MCS 7830). OS ist Debian 6. System ist ein MSI...
  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...