| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Andreas Riedel
Anmeldedatum: 01.01.1970 Beiträge: 4
|
Verfasst am: Fr Jul 11, 2003 8:42 pm Titel: sed-Frage |
|
|
Christian Felsch schrieb:
> ich möchte in einer Text-Datei Sonderzeichen (ASCII-Wert > 127) mit
> sed suchen und durch TeX-Befehle ersetzen.
> Wie muß das sed-Ersetzt-Kommando aussehen, um z.B. aus ASCII 181 ein
> \mu zu bekommen?
sed 's/µ/\\mu/g'
Gruß
Andreas
--
Those who desire to give up Freedom in order to gain Security,
will not have, nor do they deserve, either one. (T. Jefferson)
.
|
|
| Nach oben |
|
 |
Christian Felsch
Anmeldedatum: 01.01.1970 Beiträge: 16
|
Verfasst am: Fr Jul 11, 2003 9:12 pm Titel: sed-Frage |
|
|
Hauke Laging wrote:
> sed -n s/$'\181'/\\\\mu/p file
Das geht bei mir leider nicht (Debian Linux, GNU sed 4.0.7) ?!?
Es kommt keinerlei Ausgabe.
Christian
.
|
|
| Nach oben |
|
 |
Hauke Laging
Anmeldedatum: 01.01.1970 Beiträge: 1535
|
Verfasst am: Fr Jul 11, 2003 10:20 pm Titel: sed-Frage |
|
|
Christian Felsch schrieb am Freitag, 11. Juli 2003 21:12:
> Hauke Laging wrote:
>
>> sed -n s/$'\181'/\\\\mu/p file
> Das geht bei mir leider nicht (Debian Linux, GNU sed 4.0.7) ?!?
> Es kommt keinerlei Ausgabe.
Tschuldigung, dreierlei habe ich vergessen/verpeilt:
a) Es muss natürlich (z.B.)
sed -n -e s/$'\181'/\\\\mu/g -e p file
sein, damit auch die Ausgabe kommt.
b) Das habe ich in der bash gemacht, vielleicht benutzt Du eine
andere Shell? Du musst nur irgendwie das Zeichen 181 in den
sed-Aufruf basteln. Das geht auch mit echo (wie standardkonform das
ist, weiß ich nicht). Leider klappt von den beiden Varianten
sed -n -e s/"'/bin/echo -e \\265'"/\\\\mu/g -e p file
und
sed -n -e s/"$(/bin/echo -e \\265)"/\\\\mu/g -e p file
nur letztere, und die ist ja auf jeden Fall Bashismus.
Kann mir jemand erklären, wie sich die beiden Fälle unterscheiden?
c) Die Escape-Sequenz wird oktal gezählt (sowohl in der bash als auch
von echo), sodass es nicht \181, sondern \265 sein muss.
Keine rühliche Antwort, ich seh's ja ein (bevor mir das noch erklärt
wird...).
CU
Hauke
--
Die Ein-Mann-Unix-Entwicklungsabteilung: http://cr.yp.to
begin LOVE-LETTER-FOR-YOU.txt.vbs end
Gegen Schrottsoftware. Gegen Luser (man lart).
http://piology.org/ILOVEYOU-Signature-FAQ.html
.
|
|
| Nach oben |
|
 |
Hauke Laging
Anmeldedatum: 01.01.1970 Beiträge: 1535
|
Verfasst am: Sa Jul 12, 2003 9:02 pm Titel: sed-Frage |
|
|
Christian Felsch schrieb am Samstag, 12. Juli 2003 19:46:
> s/["$(echo -e \\177)"-"$(echo -e \\377)"]/?/g
> "
> ...
>
> funktioniert es nicht, statt der unbekannten Sonderzeichen wird "-"
> zu "?" !?!?! Hat da jemand eine Idee?
Ich sehe zwar das konkrete Probleme nicht, aber das stinkt doch IMHO
irgendwie nach Quoting... Versuch doch mal, die Sonderzeichen zu
quoten.
s/[\\"$(echo -e \\177)"-\\"$(echo -e \\377)"]/?/g
Dass das "-" ersetzt wird, spricht dafür, dass sed zwischen "[" und
"-" oder zwischen "-" und "]" nichts sieht.
> Ich habe dann noch etwas weiter gebastelt: um alle Sonderzeichen,
> die von meinem sed-Skript nicht erkannt werden, würde ich gerne
> alle
???
CU
Hauke
--
Die Ein-Mann-Unix-Entwicklungsabteilung: http://cr.yp.to
begin LOVE-LETTER-FOR-YOU.txt.vbs end
Gegen Schrottsoftware. Gegen Luser (man lart).
http://piology.org/ILOVEYOU-Signature-FAQ.html
.
|
|
| Nach oben |
|
 |
Erkan Yanar
Anmeldedatum: 01.01.1970 Beiträge: 379
|
Verfasst am: So Jul 13, 2003 1:59 pm Titel: sed-Frage |
|
|
Am 11 Jul 2003 20:42:43 GMT,schrieb Andreas Riedel :
> Christian Felsch schrieb:
>> ich möchte in einer Text-Datei Sonderzeichen (ASCII-Wert > 127) mit
>> sed suchen und durch TeX-Befehle ersetzen.
>> Wie muß das sed-Ersetzt-Kommando aussehen, um z.B. aus ASCII 181 ein
>> \mu zu bekommen?
>
> sed 's/µ/\\mu/g'
>
Und wem das zu einfach ist, der kann sed ja hexadezimale Zahlen übergeben.
tschazu
erkan
.
|
|
| Nach oben |
|
 |
Hauke Laging
Anmeldedatum: 01.01.1970 Beiträge: 1535
|
Verfasst am: So Jul 13, 2003 3:31 pm Titel: sed-Frage |
|
|
Erkan Yanar schrieb am Sonntag, 13. Juli 2003 13:59:
> Und wem das zu einfach ist, der kann sed ja hexadezimale Zahlen
> übergeben.
-v, please. "hex" kommt in meiner sed-man-page jedenfalls nicht vor.
CU
Hauke
--
Die Ein-Mann-Unix-Entwicklungsabteilung: http://cr.yp.to
begin LOVE-LETTER-FOR-YOU.txt.vbs end
Gegen Schrottsoftware. Gegen Luser (man lart).
http://piology.org/ILOVEYOU-Signature-FAQ.html
.
|
|
| Nach oben |
|
 |
Erkan Yanar
Anmeldedatum: 01.01.1970 Beiträge: 379
|
Verfasst am: So Jul 13, 2003 4:00 pm Titel: sed-Frage |
|
|
Am Sun, 13 Jul 2003 15:31:45 +0200,schrieb Hauke Laging :
> Erkan Yanar schrieb am Sonntag, 13. Juli 2003 13:59:
>
>> Und wem das zu einfach ist, der kann sed ja hexadezimale Zahlen
>> übergeben.
>
> -v, please. "hex" kommt in meiner sed-man-page jedenfalls nicht vor.
>
Na und:
sed 's/\xb5/\\mu/'
Jaja SUSv3 hat sogar ein Kapitel, daß sich mit "Charakter Set"s
beschäftigt.
tschazu
erakn
.
|
|
| Nach oben |
|
 |
Christian Felsch
Anmeldedatum: 01.01.1970 Beiträge: 16
|
Verfasst am: So Jul 13, 2003 5:33 pm Titel: sed-Frage |
|
|
Hauke Laging wrote:
> Ich sehe zwar das konkrete Probleme nicht, aber das stinkt doch IMHO
> irgendwie nach Quoting... Versuch doch mal, die Sonderzeichen zu
> quoten.
>
> s/[\\"$(echo -e \\177)"-\\"$(echo -e \\377)"]/?/g
>
> Dass das "-" ersetzt wird, spricht dafür, dass sed zwischen "[" und
> "-" oder zwischen "-" und "]" nichts sieht.
Dann werden die \ zu ? ;-(((
Wenn ich in die sed-Regel statt des "$(..177)" direkt ein ASCII(128)-Zeichen
einfüge, funktioniert es! Ist halt nur nich so schön lesbar...
Christian
.
|
|
| Nach oben |
|
 |
Christian Felsch
Anmeldedatum: 01.01.1970 Beiträge: 16
|
Verfasst am: So Jul 13, 2003 6:54 pm Titel: sed-Frage |
|
|
Christian Felsch wrote:
>
> Wenn ich in die sed-Regel statt des "$(..177)" direkt ein ASCII(128)-Zeichen
> einfüge, funktioniert es! Ist halt nur nich so schön lesbar...
>
Die Lösung von Erkan ist genial, damit funktioniert auch die Range-Regel im
bash-Skript:
s/[\x80-\xFF]/?/g
Vielen Dank für die Hilfe!
Christian
.
|
|
| Nach oben |
|
 |
Christian Felsch
Anmeldedatum: 01.01.1970 Beiträge: 16
|
Verfasst am: Do Jul 17, 2003 5:32 pm Titel: sed-Frage |
|
|
Erkan Yanar wrote:
> Was hälst Du davon etwas portabler und übersichtlicher an die Aufgabe
> heranzugehen?
> tr '\127-\377' '?'
Inzwischen habe ich eine neue Idee, die Sonderzeichen für TeX aufzubereiten: ich
möchte aus ASCII(XXX) einen String der Art \myCharXXX machen - also aus dem
einen Zeichen mit ASCII-Wert XXX wird ein Nummern-String mit drei "XXX".
Die Umwandlung vom ASCII-Wert in den zugehörigen Nummern-String kann ich mit
folgendem machen (am Beispiel µ, ASCII(181)):
echo -n -e \\265 | od -An -d
Nun ist nur die Frage, wie ich das Ergebnis des o.g. Kommandos in den Ersetztext
vom sed heineinbekomme (an der Stelle ...):
sed -e "s/\xb5/\\myChar.../g"
Christian
.
|
|
| Nach oben |
|
 |
Harald Brauner
Anmeldedatum: 01.01.1970 Beiträge: 163
|
Verfasst am: Do Jul 17, 2003 7:16 pm Titel: sed-Frage |
|
|
Christian Felsch wrote:
> [...]
> Nun ist nur die Frage, wie ich das Ergebnis des o.g. Kommandos in den
> Ersetztext vom sed heineinbekomme (an der Stelle ...):
> sed -e "s/\xb5/\\myChar.../g"
Prinzipiell geht das so:
sed -e "s/foo/FOO'echo "BAR"'/g"
Achte aber immer drauf, dass durch die Ersetzung evt. auftretende
Sonderzeichen entsprechend gequotet sind/werden.
HTH Harald
.
|
|
| Nach oben |
|
 |
Alexander Bartolich
Anmeldedatum: 01.01.1970 Beiträge: 342
|
Verfasst am: Sa Sep 25, 2004 10:15 pm Titel: sed-Frage |
|
|
begin followup to Georg Schwarz:
> Weiß jemand den sed-Syntax, mit dem sich folgendes Problem lösen kann?
fup2: de.comp.os.unix.shell
> In allen Zeilen der Form
>
> ^blabla [a-zA-Z0-9]*\($
^^
Diese zwei Zeichen ergeben ein Meta-Zeichen, sind in dieser Form aber
sinnlos. Ich vermute einmal, du willst eine einfache öffnende Klammer
matchen, zum Beispiel:
int foo(
> soll zwischen blabla und [a-zA-Z0-9]*\( ein String abcde eingesetzt
> werden.
echo 'blabla xyz123(' | sed -e 's/^\(blabla \)\([a-zA-Z0-9]*(\)$/\1abcde\2/'
--
post tenebras lux. post fenestras tux.
.
|
|
| Nach oben |
|
 |
Daniel Fischer
Anmeldedatum: 01.01.1970 Beiträge: 355
|
Verfasst am: Fr Jul 21, 2006 3:34 pm Titel: sed-Frage |
|
|
Jean!
> Bei sed habe ich ein kleines Problem: ich möchte folgende Regel
> anwenden
>
> s/\<versehen([^.,]*)mit\>/{NLa}voorzien{NLb}\1{Nla}van{NLb}/g
>
> Das funktioniert gut, allerdings habe ich festgestellt, dass wenn "mit"
> (oder "versehen") mehrmals in der Eingangszeile auftreten, die Regex in
> sed dann den jeweils grössten Bogen macht (also ([^.,]*) reicht dann
> bis zum weitst entfernten "mit" bzw. "versehen"):
Das heißt greedy matching, ist Standardverhalten für * und ich weiß
gerade nicht, bei welchen seds man das abschalten kann.
Ich kann aber eine Alternative mit perl anbieten. Dort bewirkt ein
nachgestelltes ?, dass der kürzestmögliche match genommen wird. Das von
Dir bemängelte Verhalten geht mit perl so:
$ echo '"blabla versehen blabla blabla mit blabla mit blabla"'
| perl -pe 's/versehen([^.,]*)mit/voorzien\1van/g'
"blabla voorzien blabla blabla mit blabla van blabla"
Und das von Dir gewünschte demnach so:
$ echo '"blabla versehen blabla blabla mit blabla mit blabla"'
| perl -pe 's/versehen([^.,]*?)mit/voorzien\1van/g'
"blabla voorzien blabla blabla van blabla mit blabla"
Gruß
Daniel
.
|
|
| Nach oben |
|
 |
Bernd Nawothnig
Anmeldedatum: 01.01.1970 Beiträge: 2476
|
Verfasst am: Fr Jul 21, 2006 6:41 pm Titel: sed-Frage |
|
|
On 2006-07-21, Jean wrote:
> bei sed habe ich ein kleines Problem:
> ich möchte folgende Regel anwenden
> s/\<versehen([^.,]*)mit\>/{NLa}voorzien{NLb}\1{Nla}van{NLb}/g
> Das funktioniert gut, allerdings habe ich festgestellt, dass wenn "mit"
> (oder "versehen") mehrmals in der Eingangszeile auftreten, die Regel dann
> den grössten Bogen macht:
> also
> "blabla versehen blabla blabla mit blabla mit blabla"
> wird
> "blabla voorzien blabla blabla mit blabla van blabla"
> Das erste "mit" wird somit nicht berücksichtigt.
> Wie kann ich dies ändern?
/\<versehen([^.,]*?)mit\>/{
s/\<versehen([^.,]*?)mit\>/voorzien\1van/g;
s/\<mit\>/van/g;
}
Ob es in allen Fällen das tut, was Du willst, ist nicht ganz
ersichtlich. Probiers einfach aus und modifiere es ggf.
xpost & f'up2
Bernd
--
Those who desire to give up freedom in order to gain security,
will not have, nor do they deserve, either one. [T. Jefferson]
.
|
|
| Nach oben |
|
 |
|