Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
Voyager_MP
- Beiträge: 628
- Registriert: 22.06.2004 10:04:07
- Wohnort: Aachen
Beitrag
von Voyager_MP » 08.02.2006 09:36:51
Code: Alles auswählen
#!/bin/bash
#set -o xtrace
for filein in "$@"; do
file=`echo "$filein" | sed \
-e 's/[A-Z]/[a-z]/g' \
-e 's/[öÖ]/oe/g' \
-e 's/[äÄ]/ae/g' \
-e 's/[üÜ]/ue/g' \
-e 's/ß/ss/g' \
-e 's/[()]/-/g' \
-e 's/\[/-/g' -e 's/\]/-/g' \
-e 's/%[0-9A-F][0-9A-F]/_/g' `
test "$filein" = "$file" || mv "$filein" "$file"
done
Hi, irgendwie hat sed mit A-Z probleme. hat einer eine idee ?
Gruß Michel
-
fuzzy
- Beiträge: 1021
- Registriert: 04.10.2003 12:15:52
Beitrag
von fuzzy » 08.02.2006 11:46:55
Hallo Voyager_MP,
ich hätte erstmal nur diese Ideen:
Code: Alles auswählen
fuzzy@sid:/tmp$ echo HallO | sed 'y/AHLO/ahlo/'
hallo
fuzzy@sid:/tmp$ echo HallO | tr "A-Z" "a-z"
hallo
Gruß fuzzy
-
ToPeG
- Beiträge: 437
- Registriert: 14.04.2004 00:42:06
Beitrag
von ToPeG » 08.02.2006 18:38:28
die Stelle
kann so nicht funktionieren, da "s" immer eine Zeichenfolge durch eine andere ersetzt (und in dem Fall würden alle zeichen von A bis Z Zeichen durch "[a-z]" ersezt). richtiger wäre hier "y" da damit ein gefundenes Zeichen der Suchliste duch ein korresponierendes Zeichen in der Ersetzungsliste tauscht. Allso richtig wäre
-
degen
- Beiträge: 93
- Registriert: 29.01.2005 16:49:31
- Wohnort: Lößnitz
Beitrag
von degen » 08.02.2006 18:47:42
Hallo,
wenn ich das richtig verstehe möchtest du alle Großbuchstaben in Kleinbuchstaben wandeln.
Code: Alles auswählen
tux@notebook:~$ echo HALLO | sed -e 's/[A-Z]/\L&/g'
hallo
tux@notebook:~$
Zur Erklärung:
\Lwandelt alle Ersetzungen in Kleinbuchstaben um. (
\U für Wandlung in Großbuchstaben,
\E beendet die Umwandlung durch \L oder \U )
Das
& wird verwendet wenn man nicht genau definierte Zeichenfolgen sucht und verändern möchte.
mfg degen
Irren ist menschlich. Aber wenn man richtig Mist bauen will, braucht man einen Computer.
-
meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
Beitrag
von meandtheshell » 13.02.2006 11:48:04
Code: Alles auswählen
max@pc1:~/misc/test$ echo das mit lower und upper case war mir neu | sed 's/[[:alpha:]]/\U&/g'
DAS MIT LOWER UND UPPER CASE WAR MIR NEU
wo gibt es zu den syntax elementen
mehr info - Standard Reguläre Ausdrücke sind das ja nicht - sind sie es doch?
markus
-
fuzzy
- Beiträge: 1021
- Registriert: 04.10.2003 12:15:52
Beitrag
von fuzzy » 13.02.2006 12:30:14
@meandtheshell
das kannte ich auch nicht, aber nachdem ich es bei einem freebsd-Sytem getestet hatte, bin ich "sehr vorsichtig" geworden
Code: Alles auswählen
fuzzy@free:/tmp$ echo HALLO | sed -e 's/[A-Z]/\L&/g'
LHLALLLLLO
fuzzy@free:/tmp$ echo das mit lower und upper case war mir neu | sed 's/[[:alpha:]]/\U&/g'
UdUaUs UmUiUt UlUoUwUeUr UuUnUd UuUpUpUeUr UcUaUsUe UwUaUr UmUiUr UnUeUu
Gruß fuzzy
-
meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
Beitrag
von meandtheshell » 13.02.2006 12:50:57
ist nicht notwendig wenn nur ein Kommando übergeben wird
Was den Rest angeht werde ich gleich verrückt - wenn ich wenigstens wüsste wo ich für eine Erklärung von
usw. suchen muss.
Die sed manpage und das texinfo manual ist natürlich auch ein Schuß in den Ofen. WTF ...
markus
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 13.02.2006 13:45:38
zu dem "\L" und "\U" habe ich auch nichts gefunden, das dürfte aber eine gnu extension sein (auf sun und aix funktioniert das auch nicht).
Ich würde überhaupt tr verwenden:
mit standard sed kommandos ist das ja etwas umständlich
:
Code: Alles auswählen
echo hallo | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'
vielleicht gibt es auch noch einen anderen Trick, das über sed zu transformieren, ich kenne aber keinen
Gruß
gms
-
meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
Beitrag
von meandtheshell » 13.02.2006 14:22:15
gms hat geschrieben:zu dem "\L" und "\U" habe ich auch nichts gefunden, das dürfte aber eine gnu extension sein
kämpfen bis zum umfallen - nicht locker lassen ... manchmal hilft es
http://www.ptug.org/sed/sedfaq.htm ----> 6.8.3 ----> D
"tr" ist auch gut aber ich denke ich werde mir das mit sed merken den sed ist dann doch das mächtigere Tool als "tr"
markus
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 13.02.2006 17:35:23
wow, du bist aber hartnäckig
meandtheshell hat geschrieben:
"tr" ist auch gut aber ich denke ich werde mir das mit sed merken den sed ist dann doch das mächtigere Tool als "tr"
kannst dir ja beide merken
persönlich habe ich eine vorliebe für Perl, dort brauche ich keine gnu extensions, es ist noch mächter als "sed" und funktioniert auf allen unixartigen Systemen gleich.
Code: Alles auswählen
file=`echo "$filein" | \
perl -pe '$_=lc ; \
s/ö/oe/gi;s/ä/ae/gi;s/ü/ue/gi;s/ß/ss/g;\
s/[\(\)\[\]]/-/g;\
s/%[0-9a-f]{2}/_/g;'`
lg
gms
-
degen
- Beiträge: 93
- Registriert: 29.01.2005 16:49:31
- Wohnort: Lößnitz
Beitrag
von degen » 13.02.2006 20:08:15
meandtheshell hat geschrieben: ist nicht notwendig wenn nur ein Kommando übergeben wird
Was den Rest angeht werde ich gleich verrückt - wenn ich wenigstens wüsste wo ich für eine Erklärung von
usw. suchen muss.
Die sed manpage und das texinfo manual ist natürlich auch ein Schuß in den Ofen. WTF ...
markus
Hallo meandtheshell,
bevor du hier wahnsinnig wirst, werfe ich einfach mal zwei Links in den Raum die ich mal gefunden hatte. Der erste enthält unter anderem auch kurze Erläuterungen zu /L und /U.
http://linuxseiten.kg-it.de/index.php?i ... Befehl_sed
http://www.tty1.net/sed-tutorium/html/index.html
Da du mich so höflich gebeten hast, habe ich dir beide auch noch mal als PN geschickt.
mfg degen
Irren ist menschlich. Aber wenn man richtig Mist bauen will, braucht man einen Computer.
-
degen
- Beiträge: 93
- Registriert: 29.01.2005 16:49:31
- Wohnort: Lößnitz
Beitrag
von degen » 13.02.2006 21:41:21
gern geschehen
mfg
degen
Irren ist menschlich. Aber wenn man richtig Mist bauen will, braucht man einen Computer.