On Thu, Sep 15, 2005 at 09:11:22PM +0200, Fabian Koch wrote:
> Da kannst du ne Menge scripts ergoogeln mit 'crlf to lf script' oder sowas.
tr -d '\r' löscht alle ^M alias \r
Beispiel:
<file.php > tmp0815.php tr -d '\r' && mv tmp0815.php file.php
> Das <? mit <?PHP ersetzen (muss das überhaupt?) würde ich mit sed machen.
>
> zB 'sed s/<?/<?PHP'
Böse!
aus <?PHP wird damit ein <?PHPPHP und später ein <?PHPPHPPHP... und
irgendwann ...
> also ungefähr:
>
> #!/bin/sh
>
> for i in *;
> do foo=$(cat $i | sed s/<?/<?PHP);
> cat foo > $i;
> done;
Äh, was soll das tun?
BTW: Nutzlose Benutzung von Katzen (google: "useless use of cat award")
Also vorausgesetzt, das regexp für sed funktioniert wie gewünscht, dann
ggf sowas:
find /var/www -name "*.ht*" -o -name "*.php" |
sed -e "s,^,',; s,$,',;" | xargs clear_php.sh
(BTW: der sed-aufruf sorgt dafür, dass alle Dateinamen in '' geschrieben
werden, damit xargs nicht unglücklich wird, wenn eine Datei ein
Leerzeichen ethält. Man könnte es auch so machen:
find ... -print0 | xargs -0 command
Das funktioniert aber nicht auf allen Unices. )
(BTW2: find ... -exec command {} \;" geht zwar, ist aber böse, zB weil
command für jede einzelne Datei ausgeführt wird. xargs hingegen bündelt
die Zeilen aus stdin und erzeugt dann wenige aufrufe mit vielen
Parametern also zB
file1
file2
...
file1000
file1001
...
file2000
...
wird zu:
command file1 file2 file3 file4 ... file1000
command file1001 file1002.... file 2000
...
)
Und clear_php.sh dann sinngemäß sowas:
http://rabe.uugrn.org/scripts/clear_php.sh
#! /bin/sh
# -----------------------------------------------
# 2005-09-15 Raphael Becker <rabe@uugrn.org>
#
# PHP-Code säubern
#
if [ $# -gt 0 ]; then
# es gibt mehr als 0 Parameter
# Temporäre Dateien
PID=$$
TMPDIR="/tmp/$(basename $0).$PID/"
mkdir "$TMPDIR" ||
{ echo "$0: Fehler: Kann kein temporäres Verzeichnis $TMPDIR anlegen" >&2 ; exit ; }
while [ -n "$1" ]; do
# Alle Dateien (file1 file2 ... file1000 ...) aus der Parameterliste durchlaufen (siehe shift!)
if [ -f "$1" ]; then
# $1 ist eine Datei
if [ -w "$1" ]; then
# Schreibrechte auf $1 vorhanden
TMPFILE="$TMPDIR/$(basename $1)"
# zB xyz/foo.php --> /tmp/clear_php.sh.47110815/foo.php
if touch "$TMPFILE"; then
# Können die tmp-Datei erzeugen
if { tr -d '\r' < "$1" | sed -e 's,<? ,<?PHP ,g' > "$TMPFILE"; }; then
# Erfolgreich in tempdatei konvertiert
if mv "$TMPFILE" "$1"; then
# success!!
echo "$1 konvertiert"
else
# Das sollte theoretisch nicht vorkommen, da vorher alles
# geprüft wurde (Schreibrechte)
echo "$0: Fehler: Datei $1 konnte nach dem Konvertieren nicht zurückgeschrieben werden" >&2
fi
else
# irgendwas im tr|sed filter ist schiefgelaufen
echo "$0: Fehler beim Konvertieren von $1" >&2
fi
else
# Das sollte ansich immer funktionieren
echo "$0: Fehler: Kann keine temporäre Datei erzeugen: $TMPFILE" >&2
fi
else
# Schreibrechte der Quelldatei nicht vorhanden, keine Kovertierung
# erzwingen
echo "$0: Fehler: $1 ist nicht schreibbar" >&2
fi
else
# zB Verzeichnisse, Sockets, Devices, ...
echo "$0: Fehler: keine Datei: $1" >&2
fi
# Parameterliste shiften, $2->$1, $3->$2 ... $n->$n-1, $n=""
shift
done
# /tmp Aufräumen.
# Gefährlich, FIXME
rm -Rf "$TMPDIR"
else
echo "Aufruf: $0 file1 [file2 [fileN [...]]]" >&2
exit 1
fi
# -----------------------------------------------
Ziemlich viel Script um ein einfaches tr | sed herum. Aber im Zweifel
lohnt es sich, diesen Aufwand zu treiben. recode arbeitet übrigens nach
einer recht ähnlichen Struktur.
> Das sollte tun. Da kannste dann noch das mit dem CRLF mit reinwerfen
Ich verwende dafür lieber "tr -d '\r'".
Es geht auch, wenn man sed -e 's,^M,,g' sagt, aber vielen ist beim
Abtippen nicht klar, dass man ein literales ^M an dieser Stelle eingeben
muss (in vi mit Strg+V, Strg+M), d.h. ein copypaste des scripts oben
würde nicht funktionieren.
Es gibt noch ein paar kleinere Schwachstellen, die dieses Script leider
für eine Anmeldung zum Nobelpreis verhindern. Wer sie findet, darf sie
behalten oder hier nennen. Es gibt einige.
Obiges Script kann natürlich für nahezu beliebige Konvertierungsaufgaben
mit temporärer Datei verwendet werden, es ist letztlich nur ein wrapper
um tr|sed herum in diesem Fall. Theoretisch kann man damit auch Grafiken
konvertieren oder andere Aufgaben erledigen, bei denen eine angebene
Datei (oder viele Dateien!) modifiziert werden soll.
MfG
--
Raphael Becker http://rabe.uugrn.org/
http://schnitzelmitkartoffelsalat.und.rahmspin.at/
.........|.........|.........|.........|.........|.........|.........|..
- application/pgp-signature Anhang: stored
Received on Thu Sep 15 22:32:30 2005