grep

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von KASKRA, 26.01.2008.

  1. KASKRA

    KASKRA Mitglied

    Dabei seit:
    04.07.2007
    Beiträge:
    42
    Zustimmungen:
    0
    Hallo
    Also ich habe folgende textdatei :
    Code:
    <form action="/search_user/searchuser.php"><img src="/images/spacer.gif" width="1" height="26" border="0" alt=""><input type="text" name="i_user" style="HEIGHT: 22px; WIDTH: 110px" size="8">                                 </td>                           </tr>  <tr>                                     <td>                                   <input type="image" src="/images/btn_nicks.gif" width="126" height="28" border="0" style="border: 0px;" vspace="0" hspace="0">                             </form>
    hier dann wieder html
    und dann wieder eine form.. usw.

    Ich möchte jetzt gerne alles zwischen der ersten <form action und </form> ausgeben
    deshalb habe ich die newlines empfernt und mit grep
    Code:
    grep -o  "<form action=.*</form>" "neue Date.txt"
    
    gemacht allerdings wird dabei nur der Anfang und das Ende sämtlicher enthaltenen form ausgegeben und dazwischen auch der nicht benötigte html code.

    Noch besser wäre es wenn ich jede einzelne gefundene form in einer anderen datei abspeichern könnte..

    Hoffe mir kann jemnad helfen
    Danke
     
  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, 26.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Das wirst du so einfach nicht mit grep hinbekommen.
    Wenn du nur alles zwischen den form tags willst, und nicht alles in einer Zeile steht:
    Code:
    sed -ne '/<form/,/<\/form/p' input
    
    Willst du das jeweils in eigene Dateien, wird es etwas komplizierter.
    Hier mal ein ungetesteter Schnellschuß mit sed und read:
    Code:
    # erstmal dafür sorgen, dass die formtags immer allein auf einer Zeile stehen
    # das macht das Leben leichter ;)
    # Dann einlesen bis formende kommt, alle leerzeichen wieder raus
    # dann in read pipen und in incremntale datei speichern
    sed -e 's/\(<[\/]*form[^>]*>\)/\n\1\n/g' testfile|
    sed -ne '/<form/{:l N;s/\n//;/<\/form/!bl;p}'|
    while read line;do 
    echo $line>form_$((x++)).txt;
    done
    
    Nun fehlen aber in den einzelnen dateien alle Ümbrüche.
    Die lassen sich aber sehr leicht wieder mit sed reinbringen.

    Wie gesagt ungetestet, versuch es mal.
    ;)
    Geht natürlich mit perl oder awk auch zu machen.

    Gruß Wolfgang
     
  4. KASKRA

    KASKRA Mitglied

    Dabei seit:
    04.07.2007
    Beiträge:
    42
    Zustimmungen:
    0
    Danke !
    Du kannst dir gar nicht vorstellen wie lange ich mich mit grep geärgert habe..
     
  5. #4 PlatonTux, 25.02.2008
    Zuletzt bearbeitet: 25.02.2008
    PlatonTux

    PlatonTux Jungspund

    Dabei seit:
    12.02.2008
    Beiträge:
    16
    Zustimmungen:
    0
    Hallo zusammen,

    bezüglich grep hätte ich auch einen "Wunsch" :))

    In einer Shell-Datei kommt dreimal echo "..." vor. Jedoch stimmt die Zeile, wo die drei echo-Befehle vorkommen nicht immer in diesem Skript, da ich hin und ab diese Datei editiere. Und so rutsch es en immer um einige Zeilen nach unten oder nach oben ...

    Nun meine Frage, wie kann ich in diesem Fall den Text, das echo ausgibt (als der Text in den "..") ändern.

    Denn mit grep kann man nach "echo" suchen und als Antwort erhält man alle drei Zeilen, wo grep vorkommt mit Zeilennummer. Gibt es da eine Möglichkeit in den gefundenen Zeilen mit echo die jeweiligen Texte zu ändern?
    Also beipielsweise wo echo "alter text" steht dann in echo "neuer text" zu ändern.

    Ich hoffe ihr versteht, was ich meine :D


    Wünsche euch noch einen Schönen Tag,
    PlatonTux (bei uns in Feldkirch, Vorarlberg haben wird momentan 16° schönes Wetter - ist sehr unüblich für diese Jahrezeit :D)
     
  6. #5 Wolfgang, 25.02.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Warum kein neuer Thread?
    Welche Shell?
    Welches OS?


    Für die Bash und GNU sed:
    echo immer auf einer Zeile?
    oder der Text immer in Hochkomma?

    Ändert alle Texte in Neuer Text

    echo immer in einer Zeile
    Code:
    sed -i -e '/echo/s/.*/echo "Neuer Text/' input
    
    echo kann mehrfach vorkommen (e.g. mit ; getrennt ) und Text immer in ""
    Code:
    sed -i -e 's/echo "[^"]*"/echo "Neuer Text"/g' input
    Wolfgang
     
  7. #6 PlatonTux, 25.02.2008
    PlatonTux

    PlatonTux Jungspund

    Dabei seit:
    12.02.2008
    Beiträge:
    16
    Zustimmungen:
    0
    Hallo Wolfgang,

    verzeih mir die unvollständige Information.

    Also ich verwende Linux und die Bash (PCLinuxOS und SAM Linux um genau zu sein). Einen neuen Threat wollte ich nicht erstellen, weil ich dachte, dass es gut zu diesem Thema passt ... :headup:


    Ich glaub, da denke ic zu kompliziert, was ich meinte war folgendes:

    Angenommen ich habe eine Shell-Dateil. In dieser Datei kommt echo drei mal vor. Also
    echo "Text 1" in der 3. Zeilt dann
    echo "Text 2" in der 14. Zeile und
    echo "Text 3" in der 20. Zeile.

    Jedoch bleiben diese Zeilennummern nicht immer gleich, da sich der Inhalt der Datei manchmal ändern kann (wenn ich beispielsweise was hinzufüge), "rutschen" diese drei Befehle weiter.
    Statt 3. Zeile wird es auf einmal die 7. Zeile und etc. ...

    Ich möchte aber die Texte in den Hochkommas ("Text 1", "Text 2", "Text 3") ändern. Jedoch möchte ich mich dies mal nicht auf die Suche mit Ausdrücken wie "Text 1", "Text 2" usw. verlassen sondern anhand des echo-Befehl (das ja nur drei mal vorkommt) die Texte umändern.

    Hättest du dies bezüglich eine Idee?
     
  8. Jabo

    Jabo Aufgabe ohne Minister

    Dabei seit:
    12.10.2006
    Beiträge:
    1.322
    Zustimmungen:
    0
    Ort:
    Hamburg
    aber sed ist ja genau für sowas da, deshalb heißt er so... du "streamst" eine Datei "input" durch ihn und unterwegs "editiert" er die Daten nach den Kriterien. Hinten kommt die Datei solchermaßen verändert wieder raus. Der Vorschlag steht da also schon von Wolfgang...
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 Hans Dampf, 25.02.2008
    Hans Dampf

    Hans Dampf Jungspund

    Dabei seit:
    19.01.2008
    Beiträge:
    20
    Zustimmungen:
    0
    Ich weiß nicht, ob ich das Problem richtig verstanden habe, aber wäre es nicht einfacher, wenn Du den auszugebenden Text in Variablen ablegen würdest, beispielsweise am Anfang der Datei?
    Code:
    Text1="foo"
    Text2="bar"
    #Hier kommt irgendwas
    echo $Text1
    #... noch irgendwas
    echo $Text2
    
     
  11. #9 PlatonTux, 26.02.2008
    PlatonTux

    PlatonTux Jungspund

    Dabei seit:
    12.02.2008
    Beiträge:
    16
    Zustimmungen:
    0
    Guten Morgen zusammen,

    ihr habt Recht, der Vorschlag von Wolfgang ist das Richte. Ich bin nun mal ein richtes Nebie, was die Linux Bash angeht - darum war ich etwas vewirrt, Verzeihung :-/ .

    @Hans Dampf
    Ja, du hast auch Recht, diese Methode ist wohl einfacher.


    Danke an euch alle :)
     
Thema:

grep

Die Seite wird geladen...

grep - Ähnliche Themen

  1. Kurztipp: Unerwünschte grep-Ausgaben vermeiden

    Kurztipp: Unerwünschte grep-Ausgaben vermeiden: Selbst aus altbekannten Programmen kann man oft noch einiges mehr herausholen - man muss sich nur einmal gründlich mit ihnen auseinandersetzen....
  2. GNU Grep 2.19 freigegeben

    GNU Grep 2.19 freigegeben: Von dem Textsuchprogramm GNU Grep ist jetzt Version 2.19 erschienen, die um durchschnittlich zehn Prozent schneller als die Vorgängerversion...
  3. KWin 4.90.1 wartet auf Bugreports

    KWin 4.90.1 wartet auf Bugreports: Martin Gräßlin, Maintainer des KDE-Fenstermanagers, hat den Code für KWin/5 als für gut genug befunden, um ihn im erweiterten Kreis testen zu...
  4. grep Ausgabe an ls übergeben

    grep Ausgabe an ls übergeben: Kann ich die Ausgabe von grep (es sind dateinamen des lokalen verzeichnisses) irgendwie gleich weiterpipen zu ls? Also so das ich zu den...
  5. Grep bis zum ersten Vorkommen

    Grep bis zum ersten Vorkommen: Hallo Zusammen, ich habe ein kleines Problem. :) Die Ausgangssituation ist folgende: Der String...