Hallo an alle, wie ich mit dem sed Zeichen ersetzen kann weiß ich, aber kann ich auch Zeichen ersetzen die nicht dem Kriterium entsprechen? Ich möchte alle Zeichen außer A-Za-z/ in _ umwandeln, geht das? Danke Daniel
Hallo, Am Donnerstag, 24. Februar 2005 07:54 schrieb Daniel Bauer:
Hallo an alle,
wie ich mit dem sed Zeichen ersetzen kann weiß ich, aber kann ich auch Zeichen ersetzen die nicht dem Kriterium entsprechen?
Ich möchte alle Zeichen außer A-Za-z/ in _ umwandeln, geht das?
Du kannst Gruppen von Zeichen in eckigen Klammern angeben. Ist das erste Zeichen in der eckigen Klammer ein "^", so gilt dies als Negation, d.h. es trifft auf alle Zeichen außer die in den Klammern zu. Mit sowas wie "[^a-Z] müsstest Du dann alle Zeichen außer den angegebenen erwischen. Infos zu regulären Ausdrücken findest Du übrigens unter "man 7 regex". Ich bin aber kein sed-Experte oder Experte für reguläre Ausdrücke - also bitte korrigiert mich, falls nötig ;-) Anke -- Think before you ...
Am Donnerstag, 24. Februar 2005 08:26 schrieb Anke Börnig:
Am Donnerstag, 24. Februar 2005 07:54 schrieb Daniel Bauer:
wie ich mit dem sed Zeichen ersetzen kann weiß ich, aber kann ich auch Zeichen ersetzen die nicht dem Kriterium entsprechen?
Ich möchte alle Zeichen außer A-Za-z/ in _ umwandeln, geht das?
Du kannst Gruppen von Zeichen in eckigen Klammern angeben. Ist das erste Zeichen in der eckigen Klammer ein "^", so gilt dies als Negation, d.h. es trifft auf alle Zeichen außer die in den Klammern zu.
ACK
Mit sowas wie "[^a-Z] müsstest Du dann alle Zeichen außer den angegebenen erwischen.
[^A-Za-z] ist da deutlich besser. Zwischen z und A könnten noch andere Zeichen liegen, hängt von der Zeichenreihenfolge ab. Umlaute sind dann aber nicht dabei. Noch besser ist daher [^[:alpha:]], weil genau die alphabetischen Zeichen des jeweiligen Zeichensatz genommen werden.
Infos zu regulären Ausdrücken findest Du übrigens unter "man 7 regex".
ACK!! Bernd
Torsten Foertsch wrote:
On Thursday 24 February 2005 07:54, Daniel Bauer wrote:
Ich möchte alle Zeichen außer A-Za-z/ in _ umwandeln, geht das?
echo -n 'x$%/^&*z' | tr -c a-zA-Z/ _; echo x__/___z
Blöde Frage: Du hast das hier geschrieben.... kannst Du auch Keilschrift schreiben ? Sag bloss, Dir fällt sowas spontan ein ? R.E.S.P.E.C.T........ Zwar verstehe ich das Kommando (hat aber auch 2-3 Minuten gedauert), aber einfallen würde mir sowas im Leben nicht. Da muss ich wohl noch ein bisschen was üben. Gruß maX (ein anaonymer Bewunderer ;o)
On Thursday 24 February 2005 12:55, maX Bauer wrote:
Torsten Foertsch wrote:
On Thursday 24 February 2005 07:54, Daniel Bauer wrote:
Ich möchte alle Zeichen außer A-Za-z/ in _ umwandeln, geht das?
echo -n 'x$%/^&*z' | tr -c a-zA-Z/ _; echo x__/___z
Blöde Frage: Du hast das hier geschrieben.... kannst Du auch Keilschrift schreiben ? Sag bloss, Dir fällt sowas spontan ein ?
Mit Keilschrift hapert's ein wenig. Gibt es dafür eigentlich Unicode Zeichen? Johannes Lehmann hat mal ein Büchlein geschrieben: "So rechneten die Ägypter und Babylonier" oder so. Da kannst Du in Keilschrift (und in einem Stellensystem mit Basis 60) rechnen lernen. за то по русский мог бы. когда я слышу "Zeichen ersetzen", сразу думаю "tr", когда "Wörter oder Phrasen ersetzen" "sed", "awk" или "perl". конечно последние три можно было бы исползовать и для "Zeichen ersetzen", но "tr" для этого проще. Torsten
On Thu, Feb 24, 2005 at 07:54:58AM +0100, Daniel Bauer wrote:
Hallo an alle,
wie ich mit dem sed Zeichen ersetzen kann weiß ich, aber kann ich auch Zeichen ersetzen die nicht dem Kriterium entsprechen?
Ich möchte alle Zeichen außer A-Za-z/ in _ umwandeln, geht das?
cat $foo | sed -e 's/[^A-Z^a-z^\/]/_/g' HTH Jürgen
Hallo Jürgen, hallo Daniel, hallo Leute, Am Donnerstag, 24. Februar 2005 08:32 schrieb Jürgen Knelangen:
On Thu, Feb 24, 2005 at 07:54:58AM +0100, Daniel Bauer wrote:
Ich möchte alle Zeichen außer A-Za-z/ in _ umwandeln, geht das?
cat $foo | sed -e 's/[^A-Z^a-z^\/]/_/g'
Stimmt nicht ganz: echo 'abc^A\BC/12*%!' | sed -e 's/[^A-Z^a-z^\/]/_/g' abc^A\BC/_____ ^ ^ Fehlerursachen: - das ^ darf zwecks Negierung nur direkt nach der öffnenden Klammer angegeben werden. Taucht es weiter hinten [nochmal] auf, wird es als ganz normales Zeichen behandelt. - Der / hat innerhalb der eckigen Klammern keine Sonderbedeutung und muss/darf deshalb auch nicht per \ escapt werden. Richtig ist: echo 'abc^A\BC/12*%!' | sed -e 's/[^A-Za-z/]/_/g' abc_A_BC/_____ Gruß Christian Boltz --
Danke, dass du das Brett vorm Kopf ein wenig gelockert hast ;) Kein Problem. Das mit den Brettern passiert mir auch ständig ;-) [> Stephan Chudowski und Sören Wengerowsky in suse-linux]
On Thu, Feb 24, 2005 at 03:20:29PM +0100, Christian Boltz wrote:
Am Donnerstag, 24. Februar 2005 08:32 schrieb Jürgen Knelangen:
On Thu, Feb 24, 2005 at 07:54:58AM +0100, Daniel Bauer wrote:
Ich möchte alle Zeichen außer A-Za-z/ in _ umwandeln, geht das?
cat $foo | sed -e 's/[^A-Z^a-z^\/]/_/g'
Stimmt nicht ganz: echo 'abc^A\BC/12*%!' | sed -e 's/[^A-Z^a-z^\/]/_/g' abc^A\BC/_____ ^ ^ Fehlerursachen: - das ^ darf zwecks Negierung nur direkt nach der öffnenden Klammer angegeben werden. Taucht es weiter hinten [nochmal] auf, wird es als ganz normales Zeichen behandelt. - Der / hat innerhalb der eckigen Klammern keine Sonderbedeutung und muss/darf deshalb auch nicht per \ escapt werden.
Richtig ist: echo 'abc^A\BC/12*%!' | sed -e 's/[^A-Za-z/]/_/g' abc_A_BC/_____
Man lernt nie aus. Besten Dank. Jürgen
On Thursday, February 24, 2005 7:54 AM, Daniel Bauer wrote: [...]
Ich möchte alle Zeichen außer A-Za-z/ in _ umwandeln, geht das?
On Thursday, February 24, 2005 8:26 AM, Anke Börnig wrote:
Du kannst Gruppen von Zeichen in eckigen Klammern angeben. Ist das erste Zeichen in der eckigen Klammer ein "^", so gilt dies als Negation, d.h. es trifft auf alle Zeichen außer die in den Klammern zu. Mit sowas wie "[^a-Z] müsstest Du dann alle Zeichen außer den angegebenen erwischen. Infos zu regulären Ausdrücken findest Du übrigens unter "man 7 regex".
On Thursday, February 24, 2005 8:30 AM, Torsten Foertsch wrote:
echo -n 'x$%/^&*z' | tr -c a-zA-Z/ _; echo x__/___z tr ist der interessante Teil
On Thursday, February 24, 2005 8:32 AM, Jürgen Knelangen wrote:
cat $foo | sed -e 's/[^A-Z^a-z^\/]/_/g'
Vielen Dank an Euch alle, es ist einfach Wahnsinn wie viele "einfache" Lösungen es wieder gibt. Nochmals Dank Daniel
Hallo, Am Thu, 24 Feb 2005, Daniel Bauer schrieb:
On Thursday, February 24, 2005 7:54 AM, Daniel Bauer wrote: [...]
Ich möchte alle Zeichen außer A-Za-z/ in _ umwandeln, geht das?
On Thursday, February 24, 2005 8:26 AM, Anke Börnig wrote:
On Thursday, February 24, 2005 8:30 AM, Torsten Foertsch wrote:
echo -n 'x$%/^&*z' | tr -c a-zA-Z/ _; echo [..] On Thursday, February 24, 2005 8:32 AM, Jürgen Knelangen wrote: cat $foo | sed -e 's/[^A-Z^a-z^\/]/_/g'
Das ist falsch so, wie Christian schon angemerkt hat. Richtig ist also sed -e 's/[^A-Za-z/]/_/g' oder sed -e 's/[^[:alpha:]/]/_/g' (man achte auf die Position des '/' _IN_ den [] aber nach dem '^' und ausserhalb des '[:alpha:]'.
Vielen Dank an Euch alle, es ist einfach Wahnsinn wie viele "einfache" Lösungen es wieder gibt.
Es gibt noch ein paar mehr: | awk 'gsub("[^A-Za-z/]","_");' | awk 'gsub("[^[:alpha:]/]","_");' | awk '{ print gensub("[^A-Za-z/]","_","g");};' | awk '{ print gensub("[^[:alpha:]/]","_","g");};' | perl -pe 's/[^A-Za-z\/]/_/g;' | perl -pe 's/[^[:alpha:]\/]/_/g;' | perl -pe 's/[^\w\/\n]/_/g;' | perl -pe 'tr/A-Za-z\//_/c;' ## oder y///, ist dasselbe Von anderen Schleifenkonstrukten usw. in perl sehe ich mal ab. Perl ist aber fuer solche Einzeiler eher ineffektiv. -dnh -- select * from users where iq > 60; 0 rows returned
participants (8)
-
Anke Börnig
-
Bernd Brodeßer
-
Christian Boltz
-
Daniel Bauer
-
David Haller
-
Jürgen Knelangen
-
maX Bauer
-
Torsten Foertsch