grep

K

KASKRA

Mitglied
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
 
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
 
Danke !
Du kannst dir gar nicht vorstellen wie lange ich mich mit grep geärgert habe..
 
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)
 
Zuletzt bearbeitet:
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
 
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?
 
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...
 
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
 
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 :)
 

Ähnliche Themen

Breite einer Tabelle via CSS definieren

NagiosGrapher 1.7.1 funktioniert nicht

Php mysql suchausgabe

Links aus HTML- Datei extrahieren

in_array Problem

Zurück
Oben