Hallo,
ich sitze immer noch an dem Problem, Verzeichnisse mit txt-, html- und
aw-Dateien sinnvoll greppen zu wollen.
Nach dem Studium diverser manpages bin ich zwar ein gutes Stueck weiter
gekommen, aber nutzbare Ergebnisse habe ich noch nicht.
find . -type f -name '*.html' -exec lynx -dump {} \; | grep -H Suchwort
wirft zwar alle Zeilen mit dem Suchwort aus, nennt aber
(zugegebenermassen nicht ganz ueberraschend) als Quelle stdio :-(
Beim folgenden Ansatz
grep -ilH "<html>" * | xargs lynx -dump {} | grep -iH Suchwort
bleibt gleich ein doppeltes Problem. Auch hier wird als Quelle stdio
genannt, und zudem wird nur die erste (?) html-Datei aus dem
Verzeichnis gegreppt, alle weiteren werden ignoriert :-((
Und als dritter Versuch:
fmt -w 60 *.html | grep -iH Suchwort
Aber auch hier als Quelle (natuerlich) stdio :-(((
Irgendwie muss es doch aber einen Weg geben, am Schluss der Kette auch
die Namen der Dateien zu erhalten, in denen das Suchwort vorkommt.
Einen schoenen Abend,
Heinz.
--
E-Mail: Heinz W. Pahlke
"Heinz W. Pahlke" wrote:
ich sitze immer noch an dem Problem, Verzeichnisse mit txt-, html- und aw-Dateien sinnvoll greppen zu wollen.
Nach dem Studium diverser manpages bin ich zwar ein gutes Stueck weiter gekommen, aber nutzbare Ergebnisse habe ich noch nicht.
find . -type f -name '*.html' -exec lynx -dump {} \; | grep -H Suchwort
Uff! Entweder ich verstehe das Problem nicht, oder die Lösung lautet grep -Hr Suchwort * (minimal) grep -Hirn Suchwort * (erweitert) Letzteren auch greppen mit Hirn genannt ;-). - Matthias
Matthias Kleine wrote (Donnerstag, 1. November 2001 19:19):
"Heinz W. Pahlke" wrote:
ich sitze immer noch an dem Problem, Verzeichnisse mit txt-, html- und aw-Dateien sinnvoll greppen zu wollen.
Nach dem Studium diverser manpages bin ich zwar ein gutes Stueck weiter gekommen, aber nutzbare Ergebnisse habe ich noch nicht.
find . -type f -name '*.html' -exec lynx -dump {} \; | grep -H Suchwort
Uff! Entweder ich verstehe das Problem nicht, oder die Lösung lautet
grep -Hr Suchwort * (minimal) grep -Hirn Suchwort * (erweitert)
tee mist.html >/dev/null <
Am Donnerstag, 1. November 2001 20:22 schrieb Thomas Hofer:
Matthias Kleine wrote (Donnerstag, 1. November 2001 19:19):
"Heinz W. Pahlke" wrote:
ich sitze immer noch an dem Problem, Verzeichnisse mit txt-, html- und aw-Dateien sinnvoll greppen zu wollen.
Nach dem Studium diverser manpages bin ich zwar ein gutes Stueck weiter gekommen, aber nutzbare Ergebnisse habe ich noch nicht.
find . -type f -name '*.html' -exec lynx -dump {} \; | grep -H Suchwort
Uff! Entweder ich verstehe das Problem nicht, oder die Lösung lautet
grep -Hr Suchwort * (minimal) grep -Hirn Suchwort * (erweitert)
tee mist.html >/dev/null <
Na ich bitte Dich, wir können doch mit Regular Expressions umgehen: $ echo blöd > file1.txt $ echo bl\ö\;d > file2.txt $ egrep -Hrn '(ö)|(ö)' * file1.txt:1:blöd file2.txt:1:blöd - Matthias -- LPI Level 1 Certified http://www.selflinux.de
Moin,
* Matthias Kleine
Na ich bitte Dich, wir können doch mit Regular Expressions umgehen: Was ist denn das für eine Lösung? Wenn Du das weiterverfolgst, wirst Du kaum vermeiden können, 'lynx -dump' nachzuprogrammieren.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
* Matthias Kleine
[01-11-01 21:05]: Na ich bitte Dich, wir können doch mit Regular Expressions umgehen:
$ egrep -Hrn '(ö)|(ö)' *
Thorsten Haude wrote (Donnerstag, 1. November 2001 21:22):
Was ist denn das für eine Lösung? Wenn Du das weiterverfolgst, wirst Du kaum vermeiden können, 'lynx -dump' nachzuprogrammieren.
Ja, denn das Problem ist, daß es außer "ö" (in iso-8859-1 codierung, was man auch nicht vergessen sollte) und "ö" auch noch andere Repräsentationen für diesen Buchstaben gibt, beispielsweise "ö". Und wie ist es mit einer Suche nach "heiß und <b>fettig</b>"? <p class="HomerSimpson">nein!</p> :-) Thomas.
Am Donnerstag, 1. November 2001 21:22 schrieb Thorsten Haude:
* Matthias Kleine
[01-11-01 21:05]: Na ich bitte Dich, wir können doch mit Regular Expressions umgehen:
Was ist denn das für eine Lösung?
Eine modulare Lösung. Ich kannte Heinz' Ausgangsfragestellung nicht, da ich sein Posting vom Montag, das er erwähnt, nicht gelesen hatte. Daher war für mich die Aufgabenstellung: "Suche rekursiv (über einen Teilbaum) nach bestimmtem Ausdruck". Hierfür gibt es grep und Verwandte. Ich verstehe übringens die Aufgabenstellung auch jetzt noch nicht, nachdem ich Heinz' ursprüngliches Posting vom Montag gelesen habe. grep liefert die Ergebnisse zeilenweise. Textdateien sind unter Unix je Zeile durch Newline begrenzt, daran orientiert sich grep. Die Länge des Kontextes läßt sich mit -A einstellen. Was ist hier so anders an HTML-Dateien? Heinz hat auch nach wie vor kein Beispiel gepostet.
Wenn Du das weiterverfolgst, wirst Du kaum vermeiden können, 'lynx -dump' nachzuprogrammieren.
Wie sagt Larry Wall - "You can do it in more then one way." Regular Expressions führen meist zu einfacheren Lösungen, die nur komplizierter aussehen. Die ganze lynx -dump Mimik wirkt jedenfalls ziemlich verwegen, aber vielleicht funktionierts ja ;-). - Matthias -- LPI Level 1 Certified http://www.selflinux.de
Moin,
* Matthias Kleine
Am Donnerstag, 1. November 2001 21:22 schrieb Thorsten Haude:
* Matthias Kleine
[01-11-01 21:05]: Na ich bitte Dich, wir können doch mit Regular Expressions umgehen: Was ist denn das für eine Lösung? Eine modulare Lösung. Ein Modul pro HTML-Entity?
Wenn Du das weiterverfolgst, wirst Du kaum vermeiden können, 'lynx -dump' nachzuprogrammieren. Wie sagt Larry Wall - "You can do it in more then one way." Regular Expressions führen meist zu einfacheren Lösungen, die nur komplizierter aussehen. Die ganze lynx -dump Mimik wirkt jedenfalls ziemlich verwegen, aber vielleicht funktionierts ja ;-). Äh, danke, ich habe auch schonmal eine Regex gesehen. Hier ging es mir darum, daß man die HTML-Entities nicht alle mit Regexen suchen will, zumal sie ggf. nicht benutzt werden. Lynx macht das alles viel besser.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
On 01-Nov-2001 Matthias Kleine wrote:
Ich verstehe übringens die Aufgabenstellung auch jetzt noch nicht, nachdem ich Heinz' ursprüngliches Posting vom Montag gelesen habe. grep liefert die Ergebnisse zeilenweise. Textdateien sind unter Unix je Zeile durch Newline begrenzt, daran orientiert sich grep. Die Länge des Kontextes läßt sich mit -A einstellen. Was ist hier so anders an HTML-Dateien? Heinz hat auch nach wie vor kein Beispiel gepostet.
Weil vermutlich jeder irgendwelche html-Dateien auf seinem Rechner
rumliegen hat.
Aber okay, ich verstosse dann eben doch mal gegen die Listen-Etikette
und haenge ein Minimalbeispiel als Attachement ran. (Per Copy and Paste
in den Mailbody einfuegen ist leider nicht, weil spaetestens dein MUA
Zeilenumbrueche einfuegt. Da ich sonst keine derartigen Attachements
verschicke, hoffe ich nur, dass ich bei der Kodierung keinen Mist
gemacht habe.)
Ein "grep -i Verlag versuch.html" wirft dir dann den gesamten p-tag aus
:-(
Wenn in dem Verzeichnis aber mehrere html-Dateien und womoeglich noch
grosse Dateien mit haeufigerem Auftreten des Suchbegriffs liegen, ist
das Ergebnis dadurch ausgesprochen unuebersichtlich. Mit den
vorgeschlagenen sub-bash-Loesungen sieht es dann eben sehr viel besser
aus.
Beste Gruesse,
Heinz.
--
E-Mail: Heinz W. Pahlke
Am Fre, 2001-11-02 um 08.07 schrieb Heinz W. Pahlke:
On 01-Nov-2001 Matthias Kleine wrote:
Ich verstehe übringens die Aufgabenstellung auch jetzt noch nicht, nachdem ich Heinz' ursprüngliches Posting vom Montag gelesen habe. grep liefert die Ergebnisse zeilenweise. Textdateien sind unter Unix je Zeile durch Newline begrenzt, daran orientiert sich grep. Die Länge des Kontextes läßt sich mit -A einstellen. Was ist hier so anders an HTML-Dateien? Heinz hat auch nach wie vor kein Beispiel gepostet.
Weil vermutlich jeder irgendwelche html-Dateien auf seinem Rechner rumliegen hat.
Aber okay, ich verstosse dann eben doch mal gegen die Listen-Etikette und haenge ein Minimalbeispiel als Attachement ran. (Per Copy and Paste in den Mailbody einfuegen ist leider nicht, weil spaetestens dein MUA Zeilenumbrueche einfuegt. Da ich sonst keine derartigen Attachements verschicke, hoffe ich nur, dass ich bei der Kodierung keinen Mist gemacht habe.)
Ein "grep -i Verlag versuch.html" wirft dir dann den gesamten p-tag aus
Nein, es wirft Dir die gesamte Zeile aus! Aus man grep: grep, egrep, fgrep - print lines matching a pattern Dein <p>.*Verlag.* ist eine einzige Zeile, Dein grep -i Ergebnis ist also lediglich eine Folge der Formatierung der HTML-Datei und hat weder mit HTML an sich noch mit Verzeichnissen etwas zu tun. D.h. je nach Standpunkt ist entweder grep für Dein Ziel nicht das richtige Werkzeug, oder aber deine Daten (*html) sind nicht geeignet formatiert. Ralf
On 02-Nov-2001 Ralf Corsepius wrote:
Am Fre, 2001-11-02 um 08.07 schrieb Heinz W. Pahlke:
Ein "grep -i Verlag versuch.html" wirft dir dann den gesamten p-tag aus Nein, es wirft Dir die gesamte Zeile aus!
Und die umnfasst dunmnerweise den ganzen p-tag.
Dein <p>.*Verlag.* ist eine einzige Zeile, Dein grep -i Ergebnis ist also lediglich eine Folge der Formatierung der HTML-Datei und hat weder mit HTML an sich noch mit Verzeichnissen etwas zu tun.
Wo habe ich das behauptet?
D.h. je nach Standpunkt ist entweder grep für Dein Ziel nicht das richtige Werkzeug, oder aber deine Daten (*html) sind nicht geeignet formatiert.
Nur, es gibt nichts anderes als grep. Und die zu greppenden Dateien
liegen nun einmal im html-Format vor. Da sie zum Teil auch "echte"
Tabellen enthalten, kann ich sie dummerweise nicht einfach alle
unbesehen in txt-Dateien umwandeln. Dann gaebe es das Problem
natuerlich nicht.
Aber mit dem Umweg ueber die Bash bringt ja grep auch eine Ausgabe, wie
ich sie mir vorstelle. Nur auf die Bash-Idee muss man erst einmal
kommen.
Einen schoenen Tag,
Heinz.
--
E-Mail: Heinz W. Pahlke
"Heinz W. Pahlke" wrote:
Ein "grep -i Verlag versuch.html" wirft dir dann den gesamten p-tag aus :-(
Das Problem hier ist nicht der <p>-Tag, sondern die Zeilenlänge, sprich das Newline kommt erst nach ein paar hundert Zeichen. grep interpretiert das als einzelne Zeile (was ja auch korrekt ist) und gibt sie aus. Hier müßte man dann das Ergebnis in ein Tool pipen, mit dem man die jede Zeile abschneiden, irgend so ein Teil aus den gnutools, aber im Moment fällt mir da auch keins ein. Vielleicht kommst Du mit fmt weiter, weiß nicht. - Matthias
Moin,
* Matthias Kleine
"Heinz W. Pahlke" wrote:
Ein "grep -i Verlag versuch.html" wirft dir dann den gesamten p-tag aus Hier müßte man dann das Ergebnis in ein Tool pipen, mit dem man die jede Zeile abschneiden Ich schlage Lynx vor.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
Thorsten Haude wrote:
Ein "grep -i Verlag versuch.html" wirft dir dann den gesamten p-tag aus Hier müßte man dann das Ergebnis in ein Tool pipen, mit dem man die jede Zeile abschneiden Ich schlage Lynx vor.
Nur damit ich das nochmal nachvollziehen kann: Wir schicken also die Zeile durch lynx -dump, um sie dann nach grep zu pipen? Oder wie sieht die Lösung des Problems mit lynx nun aus? - Matthias
Moin,
* Matthias Kleine
Thorsten Haude wrote:
Ein "grep -i Verlag versuch.html" wirft dir dann den gesamten p-tag aus Hier müßte man dann das Ergebnis in ein Tool pipen, mit dem man die jede Zeile abschneiden Ich schlage Lynx vor. Nur damit ich das nochmal nachvollziehen kann: Wir schicken also die Zeile durch lynx -dump, um sie dann nach grep zu pipen? Oder wie sieht die Lösung des Problems mit lynx nun aus? Wie genau man die Befehle zusammenpipen muß, habe ich mir nicht angesehen (dh. ich hab's mir schon angesehen, aber nichts gefunden), aber prinzipiell müßte folgendes gehen: HTML -> Lnyx -> grep Vorteil: Die Übersetzung von HTML in Plain Text (inkl. langer Zeilen, Entities, Tabellen) erledigt Lynx.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
Thorsten Haude wrote:
Wie genau man die Befehle zusammenpipen muß, habe ich mir nicht angesehen (dh. ich hab's mir schon angesehen, aber nichts gefunden), aber prinzipiell müßte folgendes gehen: HTML -> Lnyx -> grep Vorteil: Die Übersetzung von HTML in Plain Text (inkl. langer Zeilen, Entities, Tabellen) erledigt Lynx.
Das funktioniert nicht, denn was geschieht, wenn lynx die Zeile mitten im Suchwort abschneidet? Dann findet grep, das zeilenweise arbeitet, das Suchwort nicht. Vielleicht solltest Du Deine Tips doch mal ausprobieren. - Matthias
Moin,
* Matthias Kleine
Thorsten Haude wrote:
Wie genau man die Befehle zusammenpipen muß, habe ich mir nicht angesehen (dh. ich hab's mir schon angesehen, aber nichts gefunden), aber prinzipiell müßte folgendes gehen: HTML -> Lnyx -> grep Vorteil: Die Übersetzung von HTML in Plain Text (inkl. langer Zeilen, Entities, Tabellen) erledigt Lynx. Das funktioniert nicht, denn was geschieht, wenn lynx die Zeile mitten im Suchwort abschneidet? Dann findet grep, das zeilenweise arbeitet, das Suchwort nicht. Wenn Du nach Phrasen suchst, liegt das in der Natur der Sache. In HTML ist das Problem allerdings noch größer.
Ich würde mich freuen, wenn Du mir die Perfekte Lösung beschreiben würdest; bis dahin macht es nicht viel Sinn, wenn Du meinem Vorschlag mangelnde Perfektion nachweist.
Vielleicht solltest Du Deine Tips doch mal ausprobieren. Klar, sobald ich bezahlt werde. Daß ich es nicht getestet hatte, hatte ich dazu geschreiben.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
Thorsten Haude wrote:
Das funktioniert nicht, denn was geschieht, wenn lynx die Zeile mitten im Suchwort abschneidet? Dann findet grep, das zeilenweise arbeitet, das Suchwort nicht. Wenn Du nach Phrasen suchst, liegt das in der Natur der Sache. In HTML ist das Problem allerdings noch größer.
Es liegt in der Natur der Sache, wenn ich nach einer Phrase suche, diese auch vorhanden ist, ich sie aber nicht finde, weil das falsche Kommando verwende?
Ich würde mich freuen, wenn Du mir die Perfekte Lösung beschreiben würdest; bis dahin macht es nicht viel Sinn, wenn Du meinem Vorschlag mangelnde Perfektion nachweist.
grep -Hrl Suchwort Verzeichnis Wenn der das gefundene Suchwort mit in die Ausgabe soll, muß ich die Ausgabe formatieren, um unschöne lange Zeilen zu vermeiden. Das sieht so aus: grep -Hrl Suchwort Verzeichnis | fmt -w80 Wenn ich diese Ausgabe weiter verschönern will - man fmt. - Matthias
Moin,
* Matthias Kleine
Thorsten Haude wrote:
Ich würde mich freuen, wenn Du mir die Perfekte Lösung beschreiben würdest; bis dahin macht es nicht viel Sinn, wenn Du meinem Vorschlag mangelnde Perfektion nachweist. grep -Hrl Suchwort Verzeichnis Das funktioniert nicht, denn was geschieht, wenn der Text die Zeile mitten im Suchwort abschneidet? Dann findet grep, das zeilenweise arbeitet, das Suchwort nicht.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
Thorsten Haude wrote:
grep -Hrl Suchwort Verzeichnis Das funktioniert nicht, denn was geschieht, wenn der Text die Zeile mitten im Suchwort abschneidet? Dann findet grep, das zeilenweise arbeitet, das Suchwort nicht.
test.txt $ lynx -dump ./test.txt | grep iii $ grep iii ./test.txt
echo \ ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddiiidddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddiiidddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd Wie wir sehen, findet die lynx -dump Mimik den gesuchten String iii nicht, weil: lynx -dump ./test.txt ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddi iiddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd d der String iii umgebrochen wurde. grep hingegen, das zeilenweise arbeitet, findet den String problemlos. - Matthias
Moin,
* Matthias Kleine
Thorsten Haude wrote:
grep -Hrl Suchwort Verzeichnis Das funktioniert nicht, denn was geschieht, wenn der Text die Zeile mitten im Suchwort abschneidet? Dann findet grep, das zeilenweise arbeitet, das Suchwort nicht. grep hingegen, das zeilenweise arbeitet, findet den String problemlos. Liest Du eigentlich gelegentlich, was Du schreibst?
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
Thorsten Haude wrote:
grep -Hrl Suchwort Verzeichnis Das funktioniert nicht, denn was geschieht, wenn der Text die Zeile mitten im Suchwort abschneidet? Dann findet grep, das zeilenweise arbeitet, das Suchwort nicht. grep hingegen, das zeilenweise arbeitet, findet den String problemlos. Liest Du eigentlich gelegentlich, was Du schreibst?
Klar. Und im Gegensatz zu Dir teste ich es sogar. - Matthias
Moin,
* Matthias Kleine
Thorsten Haude wrote:
Liest Du eigentlich gelegentlich, was Du schreibst? Klar. Und im Gegensatz zu Dir teste ich es sogar. Dann vergleich doch mal Dein Argument in <3BE2A384.50E5068B@prs.de> mit meinem in <20011102162631.W1374@acp1130.ac1.dsh.de>.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
Thorsten Haude wrote:
Liest Du eigentlich gelegentlich, was Du schreibst? Klar. Und im Gegensatz zu Dir teste ich es sogar. Dann vergleich doch mal Dein Argument in <3BE2A384.50E5068B@prs.de> mit meinem in <20011102162631.W1374@acp1130.ac1.dsh.de>.
[ ] Du hast dieses Argument auch wirklich verstanden. [ ] Du hast das ausführliche Beispiel nachvollzogen. [x] Du hast Dich in unnötig in Deine lynx -dump Mimik verrannt. Wenn Du das Beispiel in meiner letzten Mail mal in Deine Shell gepastet hättest, wüßtest Du, was gemeint war. lynx erzeugt Zeilenumbrüche, die den Suchbegriff zerstören können. Die Rede war nicht von Suchbegriffen, die schon in der Originaldatei umgebrochen sind. Daß diese so nicht gefunden werden können, ist ohnehin klar und war nicht gemeint. - Matthias
Moin,
* Matthias Kleine
Thorsten Haude wrote:
Liest Du eigentlich gelegentlich, was Du schreibst? Klar. Und im Gegensatz zu Dir teste ich es sogar. Dann vergleich doch mal Dein Argument in <3BE2A384.50E5068B@prs.de> mit meinem in <20011102162631.W1374@acp1130.ac1.dsh.de>. [ ] Du hast dieses Argument auch wirklich verstanden. [ ] Du hast das ausführliche Beispiel nachvollzogen. [x] Du hast Dich in unnötig in Deine lynx -dump Mimik verrannt. Darf ich mitspielen? [ ] Du hast dieses Argument auch wirklich verstanden. [ ] Du hast das ausführliche Beispiel nachvollzogen. [x] Du hast Dich in unnötig in Deine anti-lynx -dump Mimik verrannt. [ ] Du kennst den Unterschied zwischen Text und Quelltext
Wenn Du das Beispiel in meiner letzten Mail mal in Deine Shell gepastet hättest, wüßtest Du, was gemeint war. Das weiß ich auch, ohne etwas zu pasten.
lynx erzeugt Zeilenumbrüche, die den Suchbegriff zerstören können. Ja.
Die Rede war nicht von Suchbegriffen, die schon in der Originaldatei umgebrochen sind. Daß diese so nicht gefunden werden können, ist ohnehin klar Siehe dazu die Mail von Thomas.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
Thorsten Haude wrote:
lynx erzeugt Zeilenumbrüche, die den Suchbegriff zerstören können. Ja.
Warum schlägst Du dann eine Lösung mit lynx vor?
Die Rede war nicht von Suchbegriffen, die schon in der Originaldatei umgebrochen sind. Daß diese so nicht gefunden werden können, ist ohnehin klar Siehe dazu die Mail von Thomas.
Siehe dazu meine Antwort. Die Diskussion hat keinen Nährwert mehr. Meinerseits EOT. - Matthias
Moin,
* Matthias Kleine
Thorsten Haude wrote:
lynx erzeugt Zeilenumbrüche, die den Suchbegriff zerstören können. Ja. Warum schlägst Du dann eine Lösung mit lynx vor? Weil es Lynx besser, nicht schlechter macht.
Die Diskussion hat keinen Nährwert mehr. Ehrlich wahr?
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
Matthias Kleine wrote (Freitag, 2. November 2001 16:08):
Thorsten Haude wrote:
Das funktioniert nicht, denn was geschieht, wenn lynx die Zeile mitten im Suchwort abschneidet? Dann findet grep, das zeilenweise arbeitet, das Suchwort nicht.
Wenn Du nach Phrasen suchst, liegt das in der Natur der Sache. In HTML ist das Problem allerdings noch größer.
Es liegt in der Natur der Sache, wenn ich nach einer Phrase suche, diese auch vorhanden ist, ich sie aber nicht finde, weil das falsche Kommando verwende?
Ich würde mich freuen, wenn Du mir die Perfekte Lösung beschreiben würdest; bis dahin macht es nicht viel Sinn, wenn Du meinem Vorschlag mangelnde Perfektion nachweist.
grep -Hrl Suchwort Verzeichnis
cat > heiss.html <
Thomas Hofer wrote:
lynx -dump heiss.html | grep "heiß" && echo gefunden. lynx -dump heiss.html | grep "fettig" && echo gefunden. lynx -dump heiss.html | grep "heiß und fettig" && echo gefunden.
Wo gefunden? In welcher Datei? Du hast rekursiv gesucht, über 1000 Dateien. Gut zu wissen, daß _irgendwo_ gefunden wurde, aber noch schöner wäre doch zu wissen, wo? Und wenn Deine Entity zufällig von lynx am Zeilenende umgebrochen worden wäre, hättest Du ebensowenig gefunden. - Matthias
Moin,
* Matthias Kleine
lynx -dump heiss.html | grep "heiß" && echo gefunden. lynx -dump heiss.html | grep "fettig" && echo gefunden. lynx -dump heiss.html | grep "heiß und fettig" && echo gefunden. Wo gefunden? In welcher Datei? Du hast rekursiv gesucht, über 1000 Dateien. Gut zu wissen, daß _irgendwo_ gefunden wurde, aber noch schöner wäre doch zu wissen, wo? Rückzugsgefecht. Jetzt hast Du nichts mehr gegen Lynx?
Die Aufruf von Lynx sollte in ein find(1) eingebettet sein, schon vergessen?
Und wenn Deine Entity zufällig von lynx am Zeilenende umgebrochen worden wäre, hättest Du ebensowenig gefunden. cf. meine Bemerkung zur perfekten Lösung.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
* Matthias Kleine schrieb am 02.Nov.2001:
"Heinz W. Pahlke" wrote:
Ein "grep -i Verlag versuch.html" wirft dir dann den gesamten p-tag aus :-(
Das Problem hier ist nicht der <p>-Tag, sondern die Zeilenlänge, sprich das Newline kommt erst nach ein paar hundert Zeichen. grep interpretiert das als einzelne Zeile (was ja auch korrekt ist) und gibt sie aus. Hier müßte man dann das Ergebnis in ein Tool pipen, mit dem man die jede Zeile abschneiden, irgend so ein Teil aus den gnutools, aber im Moment fällt mir da auch keins ein. Vielleicht kommst Du mit fmt weiter, weiß nicht.
Du meinst fold. Bernd -- Umsteiger von Microsoft Windows xx? Hast Du schon file://usr/doc/howto/de/DE-DOS-nach-Linux-HOWTO.txt gelesen? Auch file://usr/doc/Books/Linuxhandbuch.dvi ist zu empfehlen. |Zufallssignatur 1
Bernd Brodesser wrote:
einzelne Zeile (was ja auch korrekt ist) und gibt sie aus. Hier müßte man dann das Ergebnis in ein Tool pipen, mit dem man die jede Zeile abschneiden, irgend so ein Teil aus den gnutools, aber im Moment fällt mir da auch keins ein. Vielleicht kommst Du mit fmt weiter, weiß nicht.
Du meinst fold.
Nein, leider auch nicht. fold bricht um, schneidet aber nicht ab. Das heißt, wenn Du eine 100 Zeichen breite Zeile mit fold -w10 formatierst, erhälst Du 10 Zeilen a 10 Zeichen. Ich will aber nur die ersten 10 Zeichen und den Rest abschneiden. - Matthias
Moin,
* Matthias Kleine
Nein, leider auch nicht. fold bricht um, schneidet aber nicht ab. Das heißt, wenn Du eine 100 Zeichen breite Zeile mit fold -w10 formatierst, erhälst Du 10 Zeilen a 10 Zeichen. Ich will aber nur die ersten 10 Zeichen und den Rest abschneiden. Nimm Perl.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
Deja vu! On Fre, 02 Nov 2001, Thorsten Haude wrote:
* Matthias Kleine
[01-11-02 14:52]: Nein, leider auch nicht. fold bricht um, schneidet aber nicht ab. Das heißt, wenn Du eine 100 Zeichen breite Zeile mit fold -w10 formatierst, erhälst Du 10 Zeilen a 10 Zeichen. Ich will aber nur die ersten 10 Zeichen und den Rest abschneiden. Nimm Perl.
Aehem, das Thema hatten wie doch erst. Und eine Loesung auch:
Date: Mon, 29 Oct 2001 23:54:24 +0100
From: David Haller
Hallo Heinz, Heinz W. Pahlke (h.pahlke@nexgo.de) wrote:
Weil vermutlich jeder irgendwelche html-Dateien auf seinem Rechner rumliegen hat.
Aber okay, ich verstosse dann eben doch mal gegen die Listen-Etikette und haenge ein Minimalbeispiel als Attachement ran. (Per Copy and Paste in den Mailbody einfuegen ist leider nicht, weil spaetestens dein MUA Zeilenumbrueche einfuegt. Da ich sonst keine derartigen Attachements verschicke, hoffe ich nur, dass ich bei der Kodierung keinen Mist gemacht habe.)
Ein "grep -i Verlag versuch.html" wirft dir dann den gesamten p-tag aus :-( Ich will es auch mal versuchen. :-)
perl -ne 'print "$ARGV: $&\n" if /.{1,20}verlag.{0,20}/i' versuch.html Als ersten Ansatz kann man versuch.html durch $(find . -type f) ersetzen, wobei es AFAIK bessere Ansätze gibt. -Falk
On 01-Nov-2001 Matthias Kleine wrote:
Uff! Entweder ich verstehe das Problem nicht, oder die Lösung lautet
grep -Hr Suchwort * (minimal) grep -Hirn Suchwort * (erweitert)
Meine heutige Frage schloss an meine Frage von Montag an. In
html-Dateien gehen fuer grep "Zeilen" eben ueber mehrere Zeilen, so
dass die Ausgabe eben schnell sehr unuebersichtlich wird. Hilfreich
waere es deshalb, sie auf tatsaechlich eine Zeilen zu verkuerzen.
Guten Abend,
Heinz.
--
E-Mail: Heinz W. Pahlke
Moin,
* Heinz W. Pahlke
Irgendwie muss es doch aber einen Weg geben, am Schluss der Kette auch die Namen der Dateien zu erhalten, in denen das Suchwort vorkommt. Benutze 'grep -q' und 'find -print'.
Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
On 01-Nov-2001 Thorsten Haude wrote:
* Heinz W. Pahlke
[01-11-01 18:06]: Irgendwie muss es doch aber einen Weg geben, am Schluss der Kette auch die Namen der Dateien zu erhalten, in denen das Suchwort vorkommt. Benutze 'grep -q' und 'find -print'.
Wie ich das nutzen soll, ist mir zwar noch nicht ganz klar, aber
vielleicht finde ich ja eine sinnvolle Kombination.
Guten Abend,
Heinz.
--
E-Mail: Heinz W. Pahlke
Moin,
* Heinz W. Pahlke
On 01-Nov-2001 Thorsten Haude wrote:
* Heinz W. Pahlke
[01-11-01 18:06]: Irgendwie muss es doch aber einen Weg geben, am Schluss der Kette auch die Namen der Dateien zu erhalten, in denen das Suchwort vorkommt. Benutze 'grep -q' und 'find -print'. Wie ich das nutzen soll, ist mir zwar noch nicht ganz klar, aber vielleicht finde ich ja eine sinnvolle Kombination. Überlaß die Ausgabe find, dann kannst Du grep innerhalb von finds -exec betreiben und bekommst keine Probleme mit den Pipes.
Ich hab's gerade nochmal versucht, bin aber nicht darauf gekommen. Schreib mal bitte, wie die Lösung aussieht, wenn Du sie hast. Thorsten -- They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety. - Benjamin Franklin
Thorsten Haude wrote (Donnerstag, 1. November 2001 22:52):
Benutze 'grep -q' und 'find -print'. Überlaß die Ausgabe find, dann kannst Du grep innerhalb von finds -exec betreiben und bekommst keine Probleme mit den Pipes.
Ja, diese Variation sieht vielleicht sogar ein bißchen cleaner aus. find . -type f -name "*.html" -exec bash -c 'lynx -dump $0 \ | grep "suchbegriff"' {} \; -print Um diesen sub-bash Aufruf kommen wir halt nicht herum, weil wir den Text ja erst durch lynx pumpen müssen. Der Returncode von grep wird über die sub-bash an das exec von find zurückgereicht und die aktuelle Iteration von find terminiert vor dem print, wenn dieser false ist (d.h., wenn nichts gefunden wurde). Andernfalls wird über -print der aktuelle Filename ausgegeben. Mit einem -q für grep kann man die Ausgabe der gefundenen Zeilen unterdrücken. Thomas.
Heinz W. Pahlke wrote (Donnerstag, 1. November 2001 18:06):
find . -type f -name '*.html' -exec lynx -dump {} \; | grep -H Suchwort
wirft zwar alle Zeilen mit dem Suchwort aus, nennt aber (zugegebenermassen nicht ganz ueberraschend) als Quelle stdio :-(
Dieses Problem kann man so lösen, daß man den Filename nicht gleich von grep ausgeben läßt, sondern per seaparatem echo, wenn der exit-code von grep "true" ist (und das ist er, wenn es etwas gefunden hat). Wenn man mit der exec-Option etwas komplizierteres als einen simplen Befehl aufrufen will, gibt's massig Ärger - also lieber eine sub-bash aufrufen und das {} per Parameter übergeben (innerhalb der Subshell kann man dann per $0 drauf zugreifen): find . -type f -name "*.html" -exec bash -c 'lynx -dump $0 \ | grep -i openbsd >/dev/null && echo $0' {} \;
Beim folgenden Ansatz
grep -ilH "<html>" * | xargs lynx -dump {} | grep -iH Suchwort
bleibt gleich ein doppeltes Problem. Auch hier wird als Quelle stdio genannt, und zudem wird nur die erste (?) html-Datei aus dem Verzeichnis gegreppt, alle weiteren werden ignoriert :-((
Du mußt ja nicht alles durch's selbe Rohr schicken. for x in `grep -rilH "<html>" *`; do lynx -dump $x \ | grep -i Suchwort >/dev/null && echo $x ; done ...oder wenn man auch die gefundenen Zeilen ausgeben will (und zwar *nach* dem Filenamen): for x in `grep -rilH "<html>" *`; do z=`lynx -dump $x \ | grep -i Suchwort` && echo -e "Filename: $x\n$z\n" ; done Alle Angaben ohne Gewehr. Thomas.
On 01-Nov-2001 Thomas Hofer wrote:
find . -type f -name "*.html" -exec bash -c 'lynx -dump $0 \ | grep -i openbsd >/dev/null && echo $0' {} \;
Irre :-) Und wenn ich das ">/dev/null" weglasse, entspricht es sogar voll meinen Vorstellungen. Ich hatte es mit "-exec xterm" versucht, aber das war nichts.
for x in `grep -rilH "<html>" *`; do lynx -dump $x \ | grep -i Suchwort >/dev/null && echo $x ; done
...oder wenn man auch die gefundenen Zeilen ausgeben will (und zwar *nach* dem Filenamen):
for x in `grep -rilH "<html>" *`; do z=`lynx -dump $x \ | grep -i Suchwort` && echo -e "Filename: $x\n$z\n" ; done
Warum tue ich mich mit "for ... do" nur immer so schwer? Wenn ich es
lese, finde ich es voellig logisch, bloss wenn ich selbst darauf kommen
soll...
Vielen Dank und einen schoenen Abend,
Heinz.
--
E-Mail: Heinz W. Pahlke
participants (9)
-
B.Brodesser@t-online.de
-
David Haller
-
Heinz W. Pahlke
-
Matthias Kleine
-
Matthias Kleine
-
Ralf Corsepius
-
suse-linux@frodo.prima.de
-
Thomas Hofer
-
Thorsten Haude