Einträge zu Tag: Regex
Mit PHP auf ganze Worte oder ganze Sätze kürzen
Erstellt: 05.07.2011 10:59
Es kann mal sein, dass man den Anfang eines Textes braucht. In diesem Fall leistet "substr()" alleine zwar grundsätzlich den Dienst, dass es den String kürzt, jedoch meistens unschön zwischen Wörtern oder Sätzen.
Das einfachste ist es, mit "substr()" ein wenig mehr Zeichen dazu zu geben und danach mit "preg_replace()" den Rest abzuschneiden bis zum Wortende oder Satzende.
Hierzu zwei Beispiele:
200 Zeichen vom String nehmen und bis zum nächsten Wortende abschneiden. (Annahme: Jedes Wort wird getrennt von einem Leerzeichen.)
$string = preg_replace("/[^ ]*$/", '', substr($string, 0, 200));
400 Zeichen vom String nehmen und bis zum nächsten Satz abschneiden. (Annahme: Jeder Punkt trennt einen Satz.)
$string = preg_replace("/[^.]*$/", '', substr($string, 0, 400));
Diese Lösung ist hat einen kleinen Haken, ist ein Wort oder Satz länger als die Stringlänge bekommt man einen leeren String zurück.
In den meisten Fällen, sollte es jedoch seinen Dienst tun.
Gelöschte oder veränderte Dateien oder Bibliotheken in Gebrauch finden
Erstellt: 24.06.2011 16:25
Regelmässig gibt es Updates welche Sicherheitslücken stopfen.
Da Dateien und Bibliotheken welche in Gebrauch sind im Speicher bleiben, auch wenn sie schon längst gelöscht sind, bleiben die Sicherheitslücken jedoch bestehen, auch wenn die Dateien oder Biblitotheken schon lange nichtmehr auf der Festplatte existieren.
Hinweise dazu liefert "lsof", "lsof" zeigt Dateien in Benutzung an. Dateien mit neuer Inode sind markiert mit "(path inode=<Inode-Nummer>)", gelöschte Dateien mit "(deleted)" oder "DEL".
Entsprechend filtert man mit einem Regex:
# lsof | grep -Ei "(del|inode=)"
(Hier ein paar Beispieleinträge, welche darauf Hinweisen, dass man zum Beispiel Apache2 mal neu starten sollte.)
apache2 3237 www-data 11w REG 9,3 0 8028776 /var/run/apache2/ssl_mutex (deleted)
apache2 3237 www-data mem REG 9,3 7918453 /usr/lib/libapr-1.so.0.2.12 (path inode=7915038)
apache2 3237 www-data DEL REG 0,9 1361867607 /dev/zero
Debian liefert dazu sogar ein Analysetool, "checkrestart", im Paket "debian-goodies".
Die Benutzung ist äusserst simpel und liefert auch direkt einen Tipp:
# checkrestart
Found 1 processes using old versions of upgraded files
(1 distinct program)
(1 distinct packages)
Of these, 1 seem to contain init scripts which can be used to restart them:
The following packages seem to have init scripts that could be used
to restart them:
snmpd:
1902 /usr/sbin/snmpd
These are the init scripts:
/etc/init.d/snmpd restart
Soweit, viel Erfolg!
IP von Denyhosts entbannen
Erstellt: 24.06.2011 13:50
Ist eine IP erstmal auf der Liste von Denyhost, reicht es nicht, die IP einfach aus /etc/hosts.deny wieder zu entfernen, sie wird von Denyhosts sofort wieder eingetragen.
Um eine IP wieder zu entfernen, geht man deshalb wie folgt vor:
1. Denyhosts stoppen:
# /etc/init.d/denyhosts stop
2. IP von /etc/hosts.deny entfernen.
3. IP im Programmverzeichnis greppen und entsprechende Zeilen aus den gefundenen Files löschen:
# grep "xxx.xxx.xxx.xxx" /var/lib/denyhosts/*
...Oder mit sed die Zeilen direkt löschen:
# sed -i.old /xxx.xxx.xxx.xxx/d /var/lib/denyhosts/*
Das .old hinter dem "-i" erzeugt für alle Fälle noch eine unveränderte Backup-Datei mit der Endung .old. (Danke für den Tipp an Pfünder!)
4. Denyhosts starten:
# /etc/init.d/denyhosts start
In Bash einen String aus HTML/XML-Tags extrahieren
Erstellt: 21.01.2011 15:30
Will man diverse Files auswerten welche man z.B. über "wget" oder anderes aus dem Web besorgt hat, ist es immer mal wieder nötig Werte zu bekommen, welche zwischen zwei HTML- oder XML-Tags liegen. Um diesen Wert zwischen diesen zwei Tags zu extrahieren, leistet "sed" gute Dienste.
Hier die Beispieldatei "xmlfile" aus welchem der Wert "WAHTiNEED" der zwischen den beiden Tags "<key></key>" liegt herausgefiltert werden soll:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<LoginResponse xmlns="urn:internalvim25"><returnval><key>WHATiNEED</key><userName>username</userName><fullName>username</fullName><loginTime>1970-06-25T13:51:06.256885+01:00</loginTime><lastActiveTime>1970-06-25T13:51:06.256885+01:00</lastActiveTime><locale>en</locale><messageLocale>en</messageLocale></returnval></LoginResponse>
</soapenv:Body>
</soapenv:Envelope>
...und hier der sed-String:
sed -n -e 's/.*<key>\(.*\)<\/key>.*/\1/p' Filename
...welcher "WHATiNEED" erfolgreich filtert:
$ sed -n -e 's/.*<key>\(.*\)<\/key>.*/\1/p' xmlfile
WHATiNEED
Umlaute ersetzen in Perl
Erstellt: 07.01.2011 10:00
Umlaute können ein Problem sein, eine Möglichkeit dieses zu umgehen ist es die Umlaute zu ersetzen.
Hier im Beispiel werden die Umlaute in einen Hash gepackt, jeweils mit dem Zeichen gegen welches sie ersetzt werden sollen:
my $string = 'Mit so vielen Umlauten wie "äöüÖÜÄ" muß es ja schief gehen!';
my %umlaute = ("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss" );
my $umlautkeys = join ("|", keys(%umlaute));
$string =~ s/($umlautkeys)/$umlaute{$1}/g;
print $string;
Die Ausgabe:
Mit so vielen Umlauten wie "aeoeueOeUeAe" muss es ja schief gehen!