Anzeige:
Ergebnis 1 bis 14 von 14

Thema: grep Ausgabe in Datei mit Variable

  1. #1
    Registrierter Benutzer Avatar von sam600
    Registriert seit
    Sep 2007
    Beiträge
    341

    grep Ausgabe in Datei mit Variable

    Hallo,

    Ich habe eine TextDatei die ich mit grep durchsuche.

    Soweit alles kein Problem, aber...

    Ich will bzw. brauche die gefunden Zeile von grep, damit ich mit der eine andere Text Datei erstellen kann.

    Code:
    while read line; do
    # suche anpassen
    ....
            letzte=`echo $line | rev | cut -d'/' -f 1 | rev`        
            suche=`echo $letzte | cut -d - -f 1-6 | sed "s/-//g"`
    ...
    # jetzt den string in der datei gif5 suchen, wenn was gefunden wird, das ergebnis und die Varibale $line in eine Datei schreiben
            gefunden=`grep $suche gif5`
            echo "Redirect 301 $gefunden 222 $line " >> redirect
    
     done  <  datei
    Leider schreibt mir das Script nicht nur das gefundene in die Datei redirect

    Hat mir jemand einen Tipp?

  2. #2
    Universaldilletant Avatar von fork
    Registriert seit
    Dec 2001
    Ort
    Frankfurt/Main
    Beiträge
    1.175
    Kannst Du das näher ausführen?
    Was steht jetzt in der Datei redirect und was soll drin stehen?

  3. #3
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.062
    Aktuell übergibst Du den return-Code von grep - also "ok" oder "fehler" - Du willst aber die Ausgabe von grep selbst übergeben.
    z.B. so
    Code:
    a=$(grep b c)
    Ich bin root - ich darf das.

  4. #4
    Registrierter Benutzer Avatar von sam600
    Registriert seit
    Sep 2007
    Beiträge
    341
    Zitat Zitat von marce Beitrag anzeigen
    z.B. so
    Code:
    a=$(grep b c)
    Danke @marce das habe ich gesucht.

    Wie kann ich mehrere Ergebnisse filtern.

    Z.b.:
    Code:
    a=$(grep b c)
    Ergibt:
    Code:
    echo $a
    gefunden1 gefunden2 gefunden3
    Ziel ist es am Schluss, das ich jedes Ergebnis in eine Datei schreiben kann
    z.B
    gefunden1 und die Variabel $file
    gefunden2 und die Variabel $file
    gefunden3 und die Variabel $file

    Hast du mir dazu noch einen Tipp

    Vielen Dank!

  5. #5
    Banned
    Registriert seit
    Feb 2005
    Beiträge
    1.151
    Es ist wesentlich sinnvoller Beispieldaten zu posten und das gewünschte Ergebnis exakt zu beschreiben.
    Ich denke, das was du da zu erreichen suchst, lässt sich viel einfacher machen.

    Grep kennt den Schalter -o, der nur den gefundenen Teilstring ausgibt.

  6. #6
    Registrierter Benutzer Avatar von sam600
    Registriert seit
    Sep 2007
    Beiträge
    341
    Zitat Zitat von BetterWorld Beitrag anzeigen
    Es ist wesentlich sinnvoller Beispieldaten zu posten und das gewünschte Ergebnis exakt zu beschreiben.
    OK, die Beispieldaten:

    Ich habe ein Verzeichnis mit den aktuellen Bildern.

    Code:
    find ./ -name *.png > liste
    liste:
    Code:
    /media/image/product/lebensmittelfarbstift-orange.png
    /media/image/product/taufkerze-mit-spirale-rosa.png
    /media/image/product/keksausstecher-schwein.png
    dann gibt es die liste mit den alten Dateinamen: gif
    Code:
    /images/lebensmittelfarbstifte8ersetduennedickespitze_200.gif
    /images/lebensmittelfarbstifte8ersetduennedickespitze_92.gif
    /images/lebensmittelfarbstiftorange_92.gif
    /images/lebensmittelfarbstiftrosamitdoppelspitze_92.gif
    /images/lebensmittelfarbstiftrotmitduennerunddickerspi_92.gif
    ...
    Ziel ist es aus den aktuellen Bilder ( Datei liste ) den "alten" Dateinamen zu finden.
    Dann eine htaccess zu erstellen.

    htaccess
    Code:
    Redirect 301 /imgages/altesbild_92.gif /media/image/product/neues-bild.png
    Soweit habe ich alles hinbekommen.
    D.h:
    Code:
    while read line; do
            #bild name filtern
            letzte=`echo $line | rev | cut -d'/' -f 1 | rev`
            # versuche das bild mit den ersten 4 punkten zu finden
            suche=`echo $letzte | cut -d - -f 1-4 | sed "s/-//g"`
            # suche in den Datei mit den alten namen
                a=$(grep $suche gif)
           # wenn was gefunden wird erstelle eine htaccess
           # $gefunden - der alte dateinane
           # $line - der neue dateiname
           #  echo "Redirect 301 $gefunden $line " >> htaccess
    
     done  <  liste3
    Wie bekomme ich mit grep oder sonstigen die gefunde Zeile in die htaccess?

  7. #7
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.255
    Hm.. Namensgebung ist heikel und wenn du nichts hast was wirklich in beiden Listen matcht muss du das wohl oder uebel von Hand machen.

    Du kannst dir aber eine Hilfe basteln

    While read line; do "ls *erste 10 Zeichen von $line*gif" && echo
    Redirect 301 $line "Ergebniss hier einsetzen"; done < liste

    Noch ein Hinweis. Generell ist es eine schlechte Idee Befehle in `Backticks` zu setzen,
    damit kommst du irgendwann in die Quotinghoelle.
    wie oben schon als Beispiel gezeigt ist es immer besser das $(Klammernkonstrukt) zu waehlen und bei echo die Variable zu "$quoten"

    Auch sehe ich bei deinen Versuchen mit cut, einmal mal mit single 'Ticks' und einmal ohne quotes den Parameter -d beackerst, das ist sehr schlecht lesbar. Bitte lese dir den unterschied von 'Single' und "Double Ticks" an.

    Saehe dann so aus
    Code:
    while read line; do
            
      letzte=$(echo "$line" | rev | cut -d"/" -f 1 | rev)
      suche=$(echo "$letzte" | cut -d "-" -f 1-4 | sed "s/-//g")
      a=$(grep "$suche" gif)
    
    done  <  EingabeListe > AusgabeListe
    
    ## Und fuer die Lesbarkeit
    
    while read line; do
            
      letzte=$(echo "$line" | \
                    rev | \
                    cut -d "/" -f 1 | \
                    rev)
    
      suche=$(echo "$letzte" | \
                     cut -d "-" -f 1-4 | \
                     sed "s/-//g")
    
      a=$(grep "$suche" gif)
    
    done  <  EingabeListe > AusgabeListe
    Gruss Stefan
    Geändert von Huhn Hur Tu (28.07.16 um 06:52 Uhr)
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


  8. #8
    Banned
    Registriert seit
    Feb 2005
    Beiträge
    1.151
    Es ist generell immer eine sehr schlechte Idee den Befehl ls in Scripten zu verwenden.
    Der Befehl ls gibt Zeichenfolgen aus, die sowohl der Lokalisierung, wie auch einer weitreichenden Formatierung aus.
    Also das formatierte Abbild eines Dateinamens.
    Die Quelle subtiler Fehler.

    Auch rev und cut sind meist Zeichen schlechter Shellprogrammierung.
    Die Bash kann das alles besser und leichter lesbarer.

    Zitat Zitat von sam600 Beitrag anzeigen
    OK, die Beispieldaten:
    Code:
    find ./ -name *.png > liste
    liste:
    Code:
    /media/image/product/lebensmittelfarbstift-orange.png
    /media/image/product/taufkerze-mit-spirale-rosa.png
    /media/image/product/keksausstecher-schwein.png
    dann gibt es die liste mit den alten Dateinamen: gif
    Code:
    /images/lebensmittelfarbstifte8ersetduennedickespitze_200.gif
    /images/lebensmittelfarbstifte8ersetduennedickespitze_92.gif
    /images/lebensmittelfarbstiftorange_92.gif
    /images/lebensmittelfarbstiftrosamitdoppelspitze_92.gif
    /images/lebensmittelfarbstiftrotmitduennerunddickerspi_92.gif
    ...
    Und das heißt jetzt liste2 ?

    Ziel ist es aus den aktuellen Bilder ( Datei liste ) den "alten" Dateinamen zu finden.
    Dann eine htaccess zu erstellen.
    htaccess
    Code:
    Redirect 301 /imgages/altesbild_92.gif /media/image/product/neues-bild.png
    Es gibt weder in liste noch in liste2 ein altesbild oder ein neues-bild
    Welche Dateinamen konkret?
    Und wie lassen sie sich eindeutig unterscheiden?
    Der lebensmittelfarbstift-orange.png könnte ja diverse Spitzen mit oder ohne dick im Set oder Nicht im Set oder irgendwelchen Farben zu finden sein.
    Wie entsteht KONKRET aus einem NEUEN.png die Zuordnung zu dem alten Bild?

    Soweit habe ich alles hinbekommen.
    D.h:
    Code:
    while read line; do
            #bild name filtern
            letzte=`echo $line | rev | cut -d'/' -f 1 | rev`
            # versuche das bild mit den ersten 4 punkten zu finden
            suche=`echo $letzte | cut -d - -f 1-4 | sed "s/-//g"`
            # suche in den Datei mit den alten namen
                a=$(grep $suche gif)
           # wenn was gefunden wird erstelle eine htaccess
           # $gefunden - der alte dateinane
           # $line - der neue dateiname
           #  echo "Redirect 301 $gefunden $line " >> htaccess
    
     done  <  liste3
    Was steht konkret in line, wenn aus liste3 gelesen wird? Was enthält liste3?
    Wenn ich das hier: letzte=`echo $line | rev | cut -d'/' -f 1 | rev`
    richtig interpretiere, so willst du lediglich den Dateinamen lesen.
    Das geht sehr viel einfacher:
    Code:
    basename "/a/b/c/def.mpg-efg" "-efg"
    
    echo hier schneiden wir  \"-efg" ab: $( basename "/a/b/c/def.mpg-efg" "-efg" )
    echo hier nur -immer am Ende- fg: $(  basename "/a/b/c/def.mpg-efg" "fg" )
    man basename
    man dirname
    
    # eine andere Variante:
    file="/a/b/c/def.mpg-efg" 
    echo ${file##*/}
    
    # damit lassen sich auch extensions abscheiden.
    # lies das Folgende:
    LANG=C man bash | sed -rn '/\$\{parameter#word/,/\$\{parameter\/pattern/{/\$\{parameter\/pattern/d;p}'


    Wie bekomme ich mit grep oder sonstigen die gefunde Zeile in die htaccess?
    Das steht in deinem Code schon richtig drin.
    Einfach ein echo Rewrite 301 $oldfile $newfile
    Beantworte die Fragen möglichst klar mit Beispielen UND KONSISTENT.

  9. #9
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.062
    wobei ehrlich gesagt das Gesamtkonstrukt eher danach aussieht, daß man in dem verwendeten CMS (welches auch immer) vernünftig arbeiten sollte.

    Redirects auf neue URLs lass ich mir bei reinen html-Seiten ja noch gefallen, aber bei Bildern? Das soll bitte die Webseite "darüber" richtig machen - und für Google sind die Dinger eh nicht relevant.
    Ich bin root - ich darf das.

  10. #10
    Elefantenversteher Avatar von florian0285
    Registriert seit
    Jun 2016
    Beiträge
    1.054
    Zitat Zitat von BetterWorld Beitrag anzeigen
    ... sind meist Zeichen schlechter Shellprogrammierung...
    @sam600

    Ich würde mir das nicht unbedingt als Grund sehen es nicht zu verwenden. Ich zitiere da einfach mal die Aussage von vielen Dozenten, Profs und Entwicklern aus meinem Ausbildungs- und Berufsleben.

    Es gibt keinen schlechten oder guten Code. Es gibt nur Code der funktioniert oder nicht funktioniert. Der der funktioniert ist entweder mehr oder weniger effizient. Welche Qualitätskriterien der Code erfüllen muss wird an anderer Stelle entschieden.
    Ganz nach dem Motto viele Wege führen nach Rom und welcher einem gefällt ist Geschmackssache.

    Die Meinung vertrete ich selbst. Die Alternativlösung ist nicht falsch, aber bevor du deinen Code umbaust überleg dir ob es überhaupt notwendig ist. Optimieren kann man immer, es ist irgendwann nur eine Frage des Aufwands.

    Dieser Beitrag trägt nicht unbedingt zur Lösung bei, verhindert aber ggf. Mehraufwand.
    Matthäus 7:3 Was siehst du aber den Splitter in deines Bruders Auge, und wirst nicht gewahr des Balkens in deinem Auge?

  11. #11
    Banned
    Registriert seit
    Feb 2005
    Beiträge
    1.151
    Zitat Zitat von florian0285 Beitrag anzeigen
    @sam600

    Ich würde mir das nicht unbedingt als Grund sehen es nicht zu verwenden. Ich zitiere da einfach mal die Aussage von vielen Dozenten, Profs und Entwicklern aus meinem Ausbildungs- und Berufsleben.



    Ganz nach dem Motto viele Wege führen nach Rom und welcher einem gefällt ist Geschmackssache.

    Die Meinung vertrete ich selbst. Die Alternativlösung ist nicht falsch, aber bevor du deinen Code umbaust überleg dir ob es überhaupt notwendig ist. Optimieren kann man immer, es ist irgendwann nur eine Frage des Aufwands.

    Dieser Beitrag trägt nicht unbedingt zur Lösung bei, verhindert aber ggf. Mehraufwand.
    Das ist totaler Quark.
    Eine Mehrfach- Pipe, die ungeheuer umständlich mit zig Systemaufrufen lediglich den Dateinamen aus einem Pfadnamen ermittelt, ist schlechter Code.
    Er ist langsam, umständlich und überflüssig schwer zu lesen/warten.
    Dadurch ist er sehr fehleranfällig.
    Und es widerspricht dem KISS- Prinzip.

    Alleine die Funktionsfähigkeit mag kleinen Scripte kleiner Studenten kleiner Unis genügen.
    In der richtigen Welt hat so ein Quark nichts verloren.

    Es ist für alle besser, wenn man -statt solchen Käse zu rechtfertigen- schlicht seine Tools lernt.

  12. #12
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.062
    Was nichts an der Aussage ändert - entweder der Code funktioniert oder nicht. Wenn er funktioniert ist er nicht falsch oder schlecht. Evtl. ineffizient, fehleranfällig und umständlich - aer nicht schlecht, falsch oder sonst was.

    ... und ja, wenn man alle Tools kennt hat man es einfacher, elegant und effizient zu programmieren - abr nicht zwingend besser oder richtiger. Erfahrung hilft da sehr. Und die kommt mit der Zeit. Mich gruselts auch, wenn ich mir heute meine ersten Scripte und Code-Schnipsel anschaue...
    Ich bin root - ich darf das.

  13. #13
    Elefantenversteher Avatar von florian0285
    Registriert seit
    Jun 2016
    Beiträge
    1.054
    Better World werd nicht emotional / gewalttätig [emoji12] sondern bleib sachlich [emoji6]

    lies marce's Beitrag... wenn nötig so oft bis du ihn verstanden hast.

    Mein Kommentar galt dem TE, da seine Eigenleistung keineswegs schlecht ist. Wenn seine Lösung für ihn in einer für ihn akzeptablen Zeit funktioniert ist das ersmal ok. Besser gehts immer [emoji6] Nobody is perfect
    Matthäus 7:3 Was siehst du aber den Splitter in deines Bruders Auge, und wirst nicht gewahr des Balkens in deinem Auge?

  14. #14
    Registrierter Benutzer Avatar von Huhn Hur Tu
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe
    Beiträge
    2.255
    Wer ueber lausigen Code laestern will, sollte erst mal seine eigenen ersten Skripte begutachten -- kleiner Tipp, hol Dir dann bitte ein paar Taschentuecher zum weinen
    Zwischen anonym sein wollen und seine Daten nicht verkaufen wollen, liegen zwei Welten. Wenn man sich einen kostenpflichtigen Dienst sucht, dann meist, weil man für diese Dienstleistung zahlt und nicht selbst das Produkt sein will.


Ähnliche Themen

  1. grep Ausgabe + x Zeichen
    Von Pabstie im Forum Linux Allgemein
    Antworten: 2
    Letzter Beitrag: 05.04.14, 15:44
  2. ausgabe von top mit grep rausfiltern
    Von alegria im Forum Linux als Server
    Antworten: 6
    Letzter Beitrag: 29.06.08, 17:06
  3. Ausgabe anpassen mit grep und cut
    Von wretch im Forum Anwendungen Allgemein, Software
    Antworten: 9
    Letzter Beitrag: 09.01.07, 13:24
  4. ausgabe umleiten in shell variable
    Von christof.P im Forum Anwendungen Allgemein, Software
    Antworten: 2
    Letzter Beitrag: 16.05.06, 14:08
  5. ausgabe formatieren mit sed/grep??
    Von SilverICE im Forum Linux Allgemein
    Antworten: 2
    Letzter Beitrag: 16.01.04, 06:42

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •