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.