Anzeige:
Ergebnis 1 bis 8 von 8

Thema: BASH - mit find und grep Dateiinhalte überarbeiten

  1. #1
    Registrierter Benutzer
    Registriert seit
    Nov 2008
    Beiträge
    6

    BASH - mit find und grep Dateiinhalte überarbeiten

    Hy,

    ich möchte gerne alle Dateien in einem Verzeichnis und dessen Unterverzeichnisse überarbeiten. Ein bestimmter Text soll entfernt werden.

    find . -type f -exec grep -v \<meta\ name=\"description '{}' \;

    das klappt jetzt auch soweit. Jetzt möchte ich nun eben noch das in die jeweils aktuelle Datei schreiben lassen.

    Ich kenne find . -name .svn -type d -exec rm -r {} \; deshalb aber ich

    find . -type f -exec grep -v \<meta\ name=\"description > {} \;

    versucht, leider ohne Erfolg.


    Für den passen Hint wäre ich dankbar!

  2. #2
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.061
    Ich vermute, Du suchst sed...

    (wenn ich das Ansinnen richtig verstanden habe...)
    Ich bin root - ich darf das.

  3. #3
    Registrierter Benutzer
    Registriert seit
    Nov 2008
    Beiträge
    6
    Zitat Zitat von marce Beitrag anzeigen
    Ich vermute, Du suchst sed...

    (wenn ich das Ansinnen richtig verstanden habe...)
    Hy,

    das "editieren des Streams" habe ich ja schon! Das macht für mich das Grep. Ich bekomme ja nach dem Grep jede Datei richtig zurück gegeben, und dass was mir zurückgegeben wird, möchte ich weiterleiten in die ursprüngliche Datei.

    z.b. habe ich die Dateien
    index.php
    index2.php

    meine Direktive findet beide Dateien, und gibt jeweils index.php ohne den Meta-tag und index2.php ohne den Meta-Tag zurück. Ich will eben jetzt noch dass der zurückgegebene Text jeweils noch in die index.php bzw. index2.php geschrieben wird.

  4. #4
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.061
    Du suchst immer noch sed. Glaub's mir einfach.

    Code:
    [root@web1 updates]# more test
    test
    test2
    test3
    test4
    test5
    [root@web1 updates]# grep -v test4 test 
    test
    test2
    test3
    test5
    [root@web1 updates]# grep -v test4 test > test
    [root@web1 updates]# more test
    [root@web1 updates]# ls -la test
    -rw-r--r-- 1 root root 0  4. Dez 13:02 test
    [root@web1 updates]#
    Geändert von marce (04.12.08 um 12:04 Uhr)
    Ich bin root - ich darf das.

  5. #5
    MacUser Avatar von thecarpy
    Registriert seit
    Jan 2002
    Ort
    Frankreich
    Beiträge
    176
    Du kannst nicht eine Datei geleichzeitig auslesen und beschreiben ... Du ueberschreibst die dann sofort.

    Du suchst awk!

    Ich mach das immer so, bin wahrscheinlich bloed weil es etwas kompliziert ist, funktioniert aber:

    1. regex Spruch in Datei speichern:

    $cat datei.grep
    \<meta\ name=\"description '{}' \;

    2.
    Code:
    find . -name '*txt' | awk '{print "grep -fv datei.grep " $0 " > " $0"tmp && mv "$0"tmp "$0}'
    2.1 ERST testen ob das wirklich das ergibt was du willst
    3. nochmal testen!
    4.-98. nochmal testen, danach einfach:
    99.
    Code:
    find . -name '*txt' | awk '{print "grep -fv datei.grep " $0 " > " $0"tmp && mv "$0"tmp "$0}'|sh
    geht bestimmt besser, ich mache es immer so .... normalerweise mit sed im awk und nicht grep, aber wenn du nur rausholen willst ist grep auch ok ...
    Geändert von thecarpy (04.12.08 um 14:11 Uhr)
    Bill G. "Someone decided to trash the one part of Windows that was usable? The file system is no longer usable. The registry is not usable. This program listing [Add/Remove Software] was one sane place but now it is all crapped up."

  6. #6
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.061
    Zitat Zitat von thecarpy Beitrag anzeigen
    Du suchst awk!
    Nein, er sucht sed. :-)

    Mit der Option i.

    Aber ja - es führen viele Wege in's ROM.

    Man könnte natürlich auch perl verwenden oder vi, ...
    Ich bin root - ich darf das.

  7. #7
    Registrierter Benutzer
    Registriert seit
    Apr 2008
    Beiträge
    68
    So würde ich es versuchen:

    Code:
    #! /bin/bash
    
    alt="daswasduersetzenmöchest"
    neu="unddurchwas"
    
    find . -type f | while read file
    do
       text="$(cat $file)"
       echo "${text/$alt/$neu}" > $file
    done
    Mit

    Code:
       echo "${text//$alt/$neu}" > $file
    wird jede gefundene Zeile bearbeitet, mit nur einem / an dieser Stelle nur die erste gefundene Zeile.
    Geändert von hanfgeist (05.12.08 um 15:45 Uhr) Grund: was vergessen.......

  8. #8
    Registrierter Benutzer
    Registriert seit
    Nov 2008
    Beiträge
    6
    Zitat Zitat von hanfgeist Beitrag anzeigen
    So würde ich es versuchen:

    Code:
    #! /bin/bash
    
    alt="daswasduersetzenmöchest"
    neu="unddurchwas"
    
    find . -type f | while read file
    do
       text="$(cat $file)"
       echo "${text/$alt/$neu}" > $file
    done
    Mit

    Code:
       echo "${text//$alt/$neu}" > $file
    wird jede gefundene Zeile bearbeitet, mit nur einem / an dieser Stelle nur die erste gefundene Zeile.

    Danke für die ganzen Ideen, mit der letzten Lösung finde ich, hat es am verständlichsten geklappt:

    find . -type f | while read file
    do
    text="$(cat $file | grep -v \<meta\ name=\"description )"
    echo "${text}" > $file
    done

Ähnliche Themen

  1. Internet?
    Von Tuborg im Forum Anbindung an die Aussenwelt
    Antworten: 37
    Letzter Beitrag: 04.11.06, 19:43
  2. Antworten: 2
    Letzter Beitrag: 19.04.05, 11:32
  3. usb-festplatten
    Von w.freudenstein im Forum Linux Allgemein
    Antworten: 11
    Letzter Beitrag: 10.02.04, 19:27
  4. lmsensors
    Von ncoder im Forum System installieren und konfigurieren
    Antworten: 22
    Letzter Beitrag: 20.04.03, 11:00
  5. i2c-2.7.0 kompilieren
    Von skatetrash13 im Forum Kompilieren von Kernel und Sourcen
    Antworten: 11
    Letzter Beitrag: 17.03.03, 11:01

Lesezeichen

Berechtigungen

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