Softpicks.Net  Deutsch Foren-Übersicht Softpicks.Net Deutsch
Software Forum Deutsch
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

sed-Frage

 
Neues Thema eröffnen   Neue Antwort erstellen    Softpicks.Net Deutsch Foren-Übersicht -> Shell
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Andreas Riedel



Anmeldedatum: 01.01.1970
Beiträge: 4

BeitragVerfasst am: Fr Jul 11, 2003 8:42 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Felsch



Anmeldedatum: 01.01.1970
Beiträge: 16

BeitragVerfasst am: Fr Jul 11, 2003 9:12 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Hauke Laging



Anmeldedatum: 01.01.1970
Beiträge: 1535

BeitragVerfasst am: Fr Jul 11, 2003 10:20 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Hauke Laging



Anmeldedatum: 01.01.1970
Beiträge: 1535

BeitragVerfasst am: Sa Jul 12, 2003 9:02 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Erkan Yanar



Anmeldedatum: 01.01.1970
Beiträge: 379

BeitragVerfasst am: So Jul 13, 2003 1:59 pm    Titel: sed-Frage Antworten mit Zitat




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
Benutzer-Profile anzeigen Private Nachricht senden
Hauke Laging



Anmeldedatum: 01.01.1970
Beiträge: 1535

BeitragVerfasst am: So Jul 13, 2003 3:31 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Erkan Yanar



Anmeldedatum: 01.01.1970
Beiträge: 379

BeitragVerfasst am: So Jul 13, 2003 4:00 pm    Titel: sed-Frage Antworten mit Zitat




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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Felsch



Anmeldedatum: 01.01.1970
Beiträge: 16

BeitragVerfasst am: So Jul 13, 2003 5:33 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Felsch



Anmeldedatum: 01.01.1970
Beiträge: 16

BeitragVerfasst am: So Jul 13, 2003 6:54 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Felsch



Anmeldedatum: 01.01.1970
Beiträge: 16

BeitragVerfasst am: Do Jul 17, 2003 5:32 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Harald Brauner



Anmeldedatum: 01.01.1970
Beiträge: 163

BeitragVerfasst am: Do Jul 17, 2003 7:16 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Alexander Bartolich



Anmeldedatum: 01.01.1970
Beiträge: 342

BeitragVerfasst am: Sa Sep 25, 2004 10:15 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Daniel Fischer



Anmeldedatum: 01.01.1970
Beiträge: 355

BeitragVerfasst am: Fr Jul 21, 2006 3:34 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Bernd Nawothnig



Anmeldedatum: 01.01.1970
Beiträge: 2476

BeitragVerfasst am: Fr Jul 21, 2006 6:41 pm    Titel: sed-Frage Antworten mit Zitat



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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Softpicks.Net Deutsch Foren-Übersicht -> Shell Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht teilnehmen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de