grep – <Meta-Tag /> http://localhost/blog Mein privater Blog Wed, 25 Apr 2018 19:31:08 +0000 de-DE hourly 1 https://wordpress.org/?v=4.9.4 Suche nach Text in Dateien http://localhost/blog/index.php/2017/02/01/suche-nach-text-in-dateien/ http://localhost/blog/index.php/2017/02/01/suche-nach-text-in-dateien/#respond Wed, 01 Feb 2017 21:29:48 +0000 http://localhost/blog/?p=9496 Eigentlich ist das ein ganz simples Problem: Ich habe eine Reihe von Textdateien und möchte herausfinden, in welchen der Dateien ein bestimmter Textschnipsel vorkommt. Das könnten z. B. Cpp-Dateien sein, also Quelltexte für C++. Ich möchte herausfinden, in welchen Dateien ein bestimmter Ausdruck vorkommt. Das geht auf der Windows-Kommandozeile eigentlich ganz einfach:

find “mein Ausdruck” *.cpp

Den Befehl find gibt es schon sehr lange. Selbst in den ersten Versionen von MS-DOS war er schon enthalten und er funktioniert heute auf der Kommandozeile von Windows 10 immer noch.

Der Befehl find hat aber auch gewisse Einschränkungen. Schaut man sich mit find /? mal die möglichen Optionen an, dann sieht man, dass es da nicht so sehr viele Möglichkeiten gibt. Eine Option fehlt mir ganz besonders: Das rekursive Suchen in allen Unterordnern. Ist man mit einem größeren Programmierprojekt beschäftigt, dann gibt es Unterordner en masse. In jeden Ordner mit cd wechseln und dann suchen, das geht nicht.

Es gibt aber Abhilfe. Der Befehl findstr bietet alle Möglichkeiten, die man sich so wünscht.

Mit findstr /s “mein Ausdruck” *.cpp werden alle cpp-Dateien im aktuellen Ordner und in allen Unterordnern nach “mein Ausdruck” durchsucht. Mit findstr /r ist auch die Verwendung von regulären Ausdrücken möglich. Mit findstr /? kann man sich alle Möglichkeiten anzeigen lassen. Der Befehl findstr ähnelt in seinen Möglichkeiten sehr dem jeden Linux-Nutzer bekannten Befehl grep.
Den Befehl find kann man also getrost vergessen und stattdessen findstr nutzen.

]]>
http://localhost/blog/index.php/2017/02/01/suche-nach-text-in-dateien/feed/ 0
Broken Links finden http://localhost/blog/index.php/2016/04/02/broken-links-finden/ http://localhost/blog/index.php/2016/04/02/broken-links-finden/#respond Sat, 02 Apr 2016 20:45:03 +0000 http://localhost/blog/?p=439 wgetLinks sind im Internet äußerst wichtig. Eingehende Links bringen Besucher auf die Seite. Ausgehende Links ermöglichen es den eigenen Besuchern, weitergehende Informationen auf anderen Seiten zu erhalten. Interne Links führen den Benutzer durch die Seiten. Bei größeren Seiten kann es immer mal wieder passieren, dass hier und da eine Datei gelöscht wird, die von einer anderen Seite noch verlinkt ist. Wie man einfach solche gelöschten Dateien findes zeige ich hier.

Vielleicht hat man auch auf der eigenen Seite ein Bild gelöscht, das noch irgend wo benutzt wird. Das ist für den Besucher sehr ärgerlich. Wie man solche

Deswegen ist es eine gute Idee, die eigene Seite regelmäßig auf Broken Links zu überprüfen. Dafür gibt es eine Menge Tools, die das mehr oder weniger gut erledigen.

Es gibt aber auch ganz einfach Lösung mit dem sehr universellen Kommandozeilentool wget.

Auf den meisten Computern mit unix-artigem Betriebssystem ist das Tool schon installiert. Wenn nicht, dann kann es leicht nachgeholt werden:

Linux:
apt-get install wget

OS X, Installation mit Homebrew:
brew install wget

Windows:
Download des Installationspaketes hier: http://gnuwin32.sourceforge.net/packages/wget.htm

Jetzt kann es los gehen. Im Terminal wird folgender Befehl eingegeben:

wget --spider -o ~/wget.log -e robots=off -w 1 -r -p http://www.example.com

Der Sinn der ganzen Optionen hinter dem Befehl erschließt sich sicherlich nur den Wenigsten sofort. Deswegen will ich die mal kurz erläutern.

--spider
Die Option bewirkt, dass nicht alles heruntergeladen und gespeichert wird. Es werden also keine Bilder oder Videos übertragen. Es wird aber ein Report erstellt, ob es möglich wäre.
-o ~/wget.log
Hiermit werden die Log-Ausgaben in die Datei wget.log im Home-Ordner umgeleitet. Es ist natürlich jeder andere Dateiname möglich.
Unter Windows sollte nur wget.log geschrieben werden, da es das Symbol “~” für den Home-Ordner nicht kennt. Die Datei wird dann im aktuellen Ordner angelegt.
-e robots=off
Diese Option bewirkt, dass die Vorgaben aus der robots.txt nicht beachtet werden. Ansonsten könne die robots.txt für Spider den Zugriff auf bestimmte Dateien und Ordner verbieten und unser Tool würde falsche Broken Links anzeigen.
-w 1
Die Option bewirkt, dass wget zwischen jeder Anfrage eine Sekunde wartet. Ohne diese Option würde wget die Anfragen so schnell es die Hardware hergibt an den Server stellen. Dieser könnte überlastet werden.
-r
Das „r“ steht für rekursiv. wget geht jedem Link nach und versucht die verlinkte Datei herunterzuladen. Damit wird wget von einem Programm, was einzelne Dateien herunterladen kann, zu einem Crawler.
-p
Damit get wget allen in der HTML-Datei verlinkten Ressourcen nach, auch Bildern, PDFs oder auch CSS- oder JavaScript-Dateien. Ohne diese Option würde es nur verlinkten HTML-Datei folgen.
http://www.example.com
Zum Schluss muss die URL angegeben werden, mit der wget mit den crawlen beginnen sollen. www.example.com muss also mit der URL der eigenen Seite ersetzt werden.

Nach einiger Zeit findet man dann im Home-Ordner die Textdatei wget.log. Öffnet man diese mit einem Editor, dann findet man ganz zum Schluss eine Liste der Broken Links.

wget.log

Möchte man die Ergebnisse weiter per Kommandozeile auswerten, dann ist grep das Tool der Wahl, zumindest wenn man Linux oder OS X benutzt. Windowsnutzer können alternativ findstr verwenden.

grep -B 2 ' 404 ' ~/wget.log

Die Option -B 2 zeigt nicht nur die Zeile an, die den String ' 404 ' enthält sondern auch die zwei Zeilen davor. Auf die Leerzeichen vor und nach der „404“ sollte geachtet werden. Ansonsten wird jede Zeile Ausgegeben, in der irgendwo die „404“ vorkommt.

Das Ergebnis sieht dann so aus:
grep

Eine Stärke der Kommandozeile ist die gute Automatisierbarkeit von Abläufen. Mit sehr wenig Aufwand kann das in eine Shell-Skript eingebunden werden, das eventuell regelmäßig per cron-Job ausgeführt wird. Der Fantasie sind keine Grenzen gesetzt.

]]>
http://localhost/blog/index.php/2016/04/02/broken-links-finden/feed/ 0