freckeldfrickler
Goto Top

String ersetzen , Doppelpunkt und senkrechten Strich durch Unterstrich

Hallo Leute, wer hilft mir dabei Linux und Windows etwas näher zu bringen?

Hallo ,

folgende Problemstellung

Es wird mit mal mit Windows und mal mit Linux gearbeitet. Alle Dateien werden auf einem gemeinsamen FAT32 Laufwerk gespeichert.
Dabei kommen unter Linux häufig Dateinamen beim Abspeichern wie
"cmd: wie ersetzte ich sonderzeichen ? in strings | linux.com.html"  vor.  
Die Idee:
Man nimmt den vorgeschlagenen Dateinamen in die Zwischenablage, startet die cmd mittels Shortcut, filtert die Sonderzeichen aus (ersetzt sie durch Unterstriche), schickt den String wieder in die Zwischenablage und fügt den modifizierten Dateinamen in den "Speichern-unter-Dialog" ein.

Soweit, so gut.

Habe fuer Windows an einem Skript gebastelt,
welches folgende Zeichen ersetzt: "|" ; "?" u. "Leerzeichen" durch Unterstrich, ä,ö,ü,ß durch ae,oe,ue,ss .
Ist ein wenig zusammengefrickelt, weil ich manche Zeichen nur mit set und manche nur mit .vbs ersetzen konnte (alles Bausteine aus diesem Forum), aber soweit funktioniert es.

if not exist senkrechten_strich_ersetzen.cmd goto error
@echo off &setlocal
echo ersetzt die Umlaute u. ß 
rem  Leerzeichen,senkrechtenStrich,FragezeichenimString 
echo.
echo. verwendbar im Datei-aspeichern-Dialog
echo  Diese Datei ist mit einem Short-Cut (zu) versehen !

rem  benötigt die Datei : senkrechten_strich_ersetzen.cmd
  
 
 
  set "ae=ae"  
  set "oe=oe"  
  set "ue=ue"  
  set "ß=ss"  
  
 
set clip=
REM User Input
rem set /p "dat=Datei: "  
sfk151.exe fromclip > ~~~.txt


for /F "delims=" %%i in (~~~.txt) do if not defined zeile set "zeile=%%i"  
echo ZEILE ist %Zeile%
call senkrechten_strich_ersetzen.cmd
set line=%ZEILE%
REM Umleitung erfolgt in eine temporäre Datei
>"temp.txt~" (  
  REM Datei Zeile für Zeile abarbeiten.
  REM FINDSTR sucht alle Zeilen, die einen Zeilenanfang haben (also alle)
  REM  und setzt eine Zeilennummer + Doppelpunkt davor um sicher zu
  REM  stellen, dass auch Leerzeilen verarbeitet werden.
  rem for /f "delims=" %%i in ('findstr /n "^" "%dat%"') do (  
    REM String einer Variablen zuordnen.
   rem set "line=%%i"  
    REM Verzögerte Variablenerweiterung einschalten.
    setlocal enabledelayedexpansion
      REM Zeilennummer und Doppelpunkt entfernen
      set "line=!line:*:=!"  
      REM Prüfen, ob die Zeile leer ist.
      if "!line!"=="" (  
        REM Wenn ja, Leerzeile ausgeben.
        echo(
      ) else (
        REM Wenn nein, Ersetzungen durchführen und Zeile ausgeben.
        set "line=!line:ä=%Ae%!"  
        set "line=!line:ö=%Oe%!"  
        set "line=!line:ü=%ue%!"  
        set "line=!line:Ä=%Ae%!"  
        set "line=!line:Ö=%Oe%!"  
        set "line=!line:Ü=%Ue%!"  
        set "line=!line:ß=%ss%!"  
        rem ersetze Leerzeichen
        set "line=!line: =_!%  

        rem wie ersetzt man "|" ?     bsp.: set @FeldTrenner  = geht nicht "<|>",'<|>', "^|"?  
        rem set "line=!line:'^|'=%_%!"   ANTWORT - DURCH EIN vbs-Script  
        rem und wie ersetzt man den Doppelpunkt ??????
          

        echo(!line:ß=%ss%!
      )
    REM Verzögerte Variablenerweiterung ausschalten.
    endlocal
  )
)
 
REM Originaldatei durch die temporäre Datei überschreiben.
rem move "temp.txt~" "%dat%"  
move "temp.txt~" ERGEBNIS.~~~  
for /F "delims=" %%x in (ERGEBNIS.~~~) do if not defined zeile set "neuezeile=%%x"  
rem %neuezeile% |sfk151.exe toclip      (ab ins clipboard)
CLIP <  ERGEBNIS.~~~
del ERGEBNIS.~~~
del ~~~.txt
goto end
:error
cls
echo.
echo Die Datei
echo                  senkrechten_strich_ersetzen.cmd
echo                                                   wurde nicht gefunden.
echo.
echo  Skript wird abgebrochen !
pause
goto end:
:end

senkrechten_strich_ersetzen.cmd:

rem ersetzt in einem String das | durch _
@echo off & setlocal 
set "Datei=c:\mako\~~~.txt"   

set R=%temp%\Replacer.vbs 
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"): T=fso.OpenTextFile("%Datei%").ReadAll: fso.CreateTextFile("%Datei%",True).Write Replace(T,"|","_")    
cscript //nologo %R%

set R=%temp%\Replacer.vbs 
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"): T=fso.OpenTextFile("%Datei%").ReadAll: fso.CreateTextFile("%Datei%",True).Write Replace(T,"?","_")    
cscript //nologo %R%
set R=%temp%\Replacer.vbs 
 



Ein P r o b l e m bereitet mir der "Doppelpunkt" bzw. der "senkrechte Strich".
Alleine vorkommend, liesse sich das ersetzen: äö|ü? wird zu aeoe_ue_ und äö:ü? wird zu aeoe_ue_ .
Doch es gelingt mir nicht, einen zu String bearbeiten , in dem neben dem Doppelpunkt (face-smile auch ein senkrechter Strich (|) vorkommt, irgendwie stören sich die beiden Zeichen und man erhält meistens nur den unbearbeiteten String im Ergebnis.

Hat jemand sinnvolle Vorschläge oder sogar eine (optimierte) Lösung?

Das gleiche soll dann natürlich auch unter Linux mit Bash gemacht werden, aber so weit bin ich ja noch nicht ...(erst mal in Windows . . . bei Linux bin noch ganz neuer Neuling, obwohl ich da auch schon eine Vorstellung habe)

herzlich Grüße

FF

Content-ID: 203657

Url: https://administrator.de/contentid/203657

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

Lochkartenstanzer
Lochkartenstanzer 20.03.2013, aktualisiert am 25.03.2013 um 21:11:26 Uhr
Goto Top
Für linux kann ich Dir schon mal den Tipp geben Dich mit mmv und tr zu beschäftigen.

echo 'cmd: wie ersetzte ich sonderzeichen ? in strings | linux.com.html äöüÄÖÜ'  | tr 'äöüÄÖÜ :|?' 'aouAOU____'


Und du könntest unter windows einfach die bash nehmen, ggf sogar zusammen mit cygwin um eine komplette Unix-Umgebung zu haben. Dann gehen solche Sachen viel einfacher zu machen.

lks


Nachtrag:

Für die Umlaute kannst Du sed benutzen, wenn Du nicht einfach nur die Doppelpunkte mit tr entfernen willst:

echo 'äöüÄÖÜ' |  sed  "s/ä/ae/g; s/ü/ue/g; s/ö/oe/g; s/Ä/Ae/g; s/Ü/Ue/g; s/Ö/Oe/g;"
64748
64748 20.03.2013 aktualisiert um 23:02:38 Uhr
Goto Top
Hallo,

ich habe vor einiger Zeit mal in diesem Thread ein Perl-Skript gepostet, es ersetzt Sonderzeichen in Dateinamen.

Ich würde in Deiner Situation eine Skriptsparche wie Perl (natürlich geht das mit Python, Ruby o.ä. auch) einsetzen, die auch unter Windows läuft. Die Shebangzeile #!/usr/bin/perl wird unter Windows ignoriert, wenn Du das Skript mit ".pl" Endung benennst, kannst Du es unverändert sowohl unter Windows wie auch Linux laufen lassen.

Wenn Du das Pipe-Zeichen '|' ins Skript einbaust, musst Du es wahrscheinlich mit Backslash escapen
s/\|/_/g
fürs Fragezeichen gilt das Gleiche.

Markus
Endoro
Endoro 21.03.2013 um 00:52:32 Uhr
Goto Top
Hallo,

den senkrechten Strich ("Pipe") kannst du so ersetzen:

@echo off &setlocal
set "string=|bla|bla|:bla"  
set "string=%string:|=_%"  
echo %string%
endlocal
.. output:
_bla_bla_:bla

Für den Rest schaust du hier: http://www.dostips.com/forum/viewtopic.php?f=3&t=1485

bb
format-c
format-c 22.03.2013 aktualisiert um 05:07:13 Uhr
Goto Top
Grüß' dich.

Kann es sein, dass dein Skript unnötig kompliziert ist? Ich habe auf meinem Rechner (Microsoft Windows [Version 6.1.7601]) folgendes ausprobiert:
c:\>set test=blabla:blabla^|bla:bla^|bla

c:\>set test
test=blabla:blabla|bla:bla|bla

c:\>set test=%test:|=_%

c:\>set test
test=blabla:blabla_bla:bla_bla

c:\>set test=%test::=_%

c:\>set test
test=blabla_blabla_bla_bla_bla

funktioniert einwandfrei. Allerdings nur dann, wenn man die Pipes ("|") als erstes ersetzt und danach den Rest.

Ich würde die verzögerte Erweiterung von Umgebungsvariablen noch vor der for-Schleife aktivieren.


Falls es bei dir auf die genaue Einhaltung der Schritte (Kopieren des Dateinamens in die Zwischenablage im Speichern-Dialog, Batch per Tastenkombi, Einfügen usw.) nicht ankommt — und wenn die Interaktion mit den Anwender sowieso nicht ausgeschlossen wird, sprich, wenn es eh kein unbeaufsichtigter Job ist —, schaue dir das Tool "Ant Renamer" an. Dort kannst du eine Ersetzungstabelle anlegen und diese immer wieder benutzen. Dann musst du nicht jede einzelne Datei umbenennen, sondern kannst warten, bis sich einige angesammlt haben. Ich benutze das Tool u.a. sogar zur Transliteration ganzer Alphabete.
format-c
format-c 22.03.2013 aktualisiert um 05:09:25 Uhr
Goto Top
Was hältst du davon?
@SETLOCAL

for /f "tokens=*" %%a in ('sfk fromclip') do set "zwischenablage=%%a"

@echo.
@echo.vorher
@set zwischenablage

@set zwischenablage=%zwischenablage:|=_%
@set zwischenablage=%zwischenablage::=_%
@set zwischenablage=%zwischenablage:?=_%
@set zwischenablage=%zwischenablage:ä=ae%
@set zwischenablage=%zwischenablage:ö=oe%
@set zwischenablage=%zwischenablage:ü=ue%

@echo.
@echo.nachher
@set zwischenablage

echo %zwischenablage% | sfk toclip

  • weniger Code
  • kein Zugriff auf die Festplatte notwendig


Gruß
format-c
freckeldfrickler
freckeldfrickler 25.03.2013 um 13:18:57 Uhr
Goto Top
Hallo format_c,
schöner Vorschlag.Hätte mir sehr gut gefallen! Ich habe jetzt zwar eine Umsetzung, die die kompletten Ersetzungen in der .cmd mittels .vbs realisiert, ist aber grottenlangsam i.
Nach mehreren Versuchen ist es mir gelungen, Deinen Vorschlage irgendwie umzusetzen, dass es läuft.(Oder habe ich Deinen Vorschlag nicht richtig verstanden?)
Die Filterung (Zeichenersetzung) funktioniert damit zum Teil.
D.h. es werden zwar alle Zeichen, so wie ich es will, ersetzt, aber:

Das Endergebnis für die Zeichenkette 'väöü| :ÄÖÜ ' (am Ende 3 Spaces)
ergibt
""""""""""vaeoeue___AeUeUe____"_"""""""""
Wieso kommen die ganzen Anführungszeichen - und das letzte "_" ist auch zuviel.

Ich habe nun auch versucht, zum Schluss nach dem Muster von BIBER (Anführungszeichen per Batch aus Datei löschen) die überflüssigen Zeichen wegzufiltern. Auch das klappt nur halbherzig und ich bekomme kein zufriedenstellendes Ergebnis. (Es bleibt immer ein Unterstrich zu viel. Schon alles Mögliche probiert.
Gibt es keine andere Lsg, um von vorneherein die ganzen """"" zu vermeiden.

Das Ergebnis mit den vielen Anführungsstrichen ist natürlich nicht gewünscht, skf (vermute ich mal) kann damit auch nicht umgehen und speichert nichts in die Zwischenablage zurück.
Noch irdendeine gute Idee dazu?
Hier meine "halbe Lösung":

@echo off
del ~~~.txt
rem 
echo direkt in speicher lesen funkt:
for /f "tokens=*" %%a in ('sfk151.exe fromclip') do set "zwischenablage=%%a"   

set zwischenablage="%zwischenablage:|=_%"   
set zwischenablage="%zwischenablage::=_%"  
set zwischenablage="%zwischenablage:ä=ae%"  
set zwischenablage="%zwischenablage:ö=oe%"  
set zwischenablage="%zwischenablage:ü=ue%"  
set zwischenablage="%zwischenablage:Ä=Ae%"  
set zwischenablage="%zwischenablage:Ö=Ue%"  
set zwischenablage="%zwischenablage:Ü=Ue%"  
set zwischenablage="%zwischenablage: =_%"  
echo "%zwischenablage%"  >> ~~~.txt  
rem ohne die Umleitung nach ZW erhielte man eine mehrzeilige ~~~.txt
set ZW="%zwischenablage%"  
echo kontrolle: Schau in  ~~~.txt !
echo %ZW% > ~~~.txt
pause
rem die Zeichenkette    väöü| :ÄÖÜ    ergibt: 
rem """"""""""vaeoeue___AeUeUe____"_"""""""""    
rem bis auf die vielen "" und das letzte "_"  wäre das Ergebnis korrekt.  
rem darum funktioniert (vermutlich) nächstes wohl auch nicht:

rem darum (als Versuch):
endlocal
@echo off & setlocal enableDelayedExpansion 
echo schau in ~~~.txt

rem ersetzen nach "Biber":  
pause
for /f "delims=" %%i in (~~~.txt) do (   



   set "line=%%i"    
rem soll _"_" durch nichts ersetzen:  
   echo !line:_^"_"^=!  
 
pause
) 
for /f "delims=" %%i in (~~~.txt) do (   



   set "line=%%i"    



rem soll " durch nichts ersetzen:  
   echo !line:"=!   

pause
) 

%zwischenablage% | sfk151.exe toclip
set zwischenablage=

 
format-c
format-c 25.03.2013 um 17:11:29 Uhr
Goto Top
Hallo freckeldfrickler.
set zwischenablage="%zwischenablage:ä=ae%"
ist nicht das gleiche wie
set "zwischenablage=%zwischenablage:ä=ae%"
In der ersten zeile "pumpst" du mit jeder Ausführung dieser Anweisung die %zwischenablage% mit den Anführungszeichen auf.
Ferner musst du kontrollieren, dass bei den set-Anweisungen am Ende der Zeile keine Leerzeichen stehen (das ist z.B. dann der Fall, wenn du den Quellcode von dieser Internetseite kopierst).
Hier ist ein Beipiel, wie sich die "" und das Leerzeichen auf die Zuweisung auswirken:
c:\>set test=abc

c:\>set test
test=abc

c:\>set test="abc"  

c:\>set test
test="abc"  

c:\>set "test=abc"  

c:\>set test
test=abc

c:\>set test_mit_Leerzeichen_am_Ende="abc"  

c:\>echo -%test_mit_Leerzeichen_am_Ende%-
-"abc" -  


Grüße
format-c
freckeldfrickler
freckeldfrickler 25.03.2013 um 20:17:45 Uhr
Goto Top
Hallo format_c,

ich bedanke mich für die Suoertips.Dass die Stellung der Anführungszeichen DIESE Rolle spielen war mir nicht bewußt.

Und die (unsichtbaren) Leerzeichen am Ende der Zeilen, na, darauf muss man erst kommen!

Ich habe alles nach Deinen Vorschlägen korrigiert und, wen wundert's [mich!], es funktioniert, wie es sein sollte.
Leerzeichen, Doppelpunkt, Fragezeichen, senkrechter Strich (Pipe) wir durch Unterstrich ersetzt ... die Umlaute durch ae,oe,ue ...

Hier der komplette, funktionierende Code

 @echo off 
 

 

echo direkt in Speicher lesen funkt: 


for /f "tokens=*" %%a in ('sfk151.exe fromclip') do set "zwischenablage=%%a"  

rem ersetze die gewuenschten Zeichen:

set "zwischenablage=%zwischenablage:|=_%"  



set "zwischenablage=%zwischenablage::=_%"  



set "zwischenablage=%zwischenablage:ä=ae%"  



set "zwischenablage=%zwischenablage:ö=oe%"  



set "zwischenablage=%zwischenablage:ü=ue%"  



set "zwischenablage=%zwischenablage:Ä=Ae%"  



set "zwischenablage=%zwischenablage:Ö=Ue%"  


set "zwischenablage=%zwischenablage:Ü=Ue%"  


set "zwischenablage=%zwischenablage:ß=ss%"  


set "zwischenablage=%zwischenablage:?=_%"  


set "zwischenablage=%zwischenablage: =_%"  


rem ohne die Umleitung nach ZW erhielte man eine mehrzeilige ~~~.txt:
echo %zwischenablage% >> ~~~.txt 

  

rem ab in die Zwischenablage:
CLIP < ~~~.txt	
del ~~~.txt
  

In soweit könnte das Problem für Windows als gelöst erklärt werden.

Allerdings habe ich noch weitere Fragen, die bei der Problemlösung aufgetaucht sind.
Das berifft die Ersetzung mit SED (für Windows, CYGWIN).

Wie zum Teufel funktioniert die Ersetzung von Umlauten und anderen Sonderzeichen unter Windows?

c:\cygwin\bin\sed -e  "s/O/U/g;s/A/E/g" c:\tmp\text > c:\tmp\text.new  

ersetzt ohne Probleme , hier O durch U.
Aber wie ersetz man Ö durch Oe? oder gar das Leerzeichen durch den Unterstrich?
Ich habe schon alles mögliche gelesen und auch versucht (maskieren mit einem \, mit ^, in einfachen Hochkommatas, in Backticks, in Anführungszeichen - aber alles funktioniert nicht.

Wer kann mir dabei helfen.

Und format_c,
vielen herzlichen Dank für die kleinen, aber sehr wertvollen Tips !
Lochkartenstanzer
Lochkartenstanzer 25.03.2013 aktualisiert um 21:11:07 Uhr
Goto Top
Zitat von @freckeldfrickler:

Allerdings habe ich noch weitere Fragen, die bei der Problemlösung aufgetaucht sind.
Das berifft die Ersetzung mit SED (für Windows, CYGWIN).

Wie zum Teufel funktioniert die Ersetzung von Umlauten und anderen Sonderzeichen unter Windows?

> c:\cygwin\bin\sed -e  "s/O/U/g;s/A/E/g" c:\tmp\text > c:\tmp\text.new
> 

ersetzt ohne Probleme , hier O durch U.
Aber wie ersetz man Ö durch Oe? oder gar das Leerzeichen durch den Unterstrich?

Wie ich schon oben schrieb:

echo 'äöüÄÖÜ ' | sed  "s/ä/ae/g; s/ü/ue/g; s/ö/oe/g; s/Ä/Ae/g; s/Ü/Ue/g; s/Ö/Oe/g; s/ /_/g;"
freckeldfrickler
freckeldfrickler 26.03.2013 um 12:51:20 Uhr
Goto Top
Hallo Lochkartenstanzer,

Dankefür Deinen Beitrag.
Ich hatte den ersten Vorschlag schon im Kopf. Weil das pipe-Zeichen darin vorkommt, nehme (nahm) ich an, es ist eine Zeile, die für Linux gedacht ist.

Sorry, vielleicht bin ich zu blöd dafür, aber damit funktioniert das in Windows nicht ...
Ich erhalte eine Anzeige mit den Umlauten in kryptischen Zeichen aus dem ANSI-Zeichensatz, leite ich die Anzeige in eine Datei um, erhalte ich
bei diesem Beispiel " 'äöüÄÖÜ_'_ " (ohne die Anführungszeichen).

Ich bin schon der Meinung, dass ich sowas ähnliches wie
c:\cygwin\bin\sed -e  "s/ü/ue/g;s/A/E/g;s/Ö/Oe/g;s/A/E/g;s/ä/Ae/g;s/A/E/g" c:\tmp\text > c:\tmp\text.new   
benötige.
Das funktioniert aber in Windows nicht, obwohl, wie ich gelesen habe, die Umlaute nicht maskiert werden müssen ,(was aber (offensichtlich) wohl nur in Linux gilt(?)).
Ebenso lassen sich auch nicht das ß; |; ?; ; SPACE ersetzen, es muss doch dafür eine Lsg. für SED unter Windows geben.
Ich habe schon versucht, die code page zu ändern ( von 850 auf 1252); doch das bringt auch NIXXX.
[Aus der Hife für cygwin:
"When using a program in a console window (command.com or cmd.exe) and setting LANG and LANGUAGE, you must also set the correct {code page} with the {chcp} command; for Western European languages, code page {1252} usually suffices."]

Vorschläge ?????

Schönen Tach noch ...
FF
64748
64748 26.03.2013 um 13:16:32 Uhr
Goto Top
Was wird denn angezeigt, wenn Du unter cygwin
echo $LANG
ausführst?

Markus
freckeldfrickler
freckeldfrickler 26.03.2013 um 13:31:15 Uhr
Goto Top
Hallo hmarkus,

NICHTS.

Also noch mal vorweg: Ich bin nicht ganz der Profi für solche Sachen.

Mir ist schon nicht richtig klar, ob ich "echo $LANG" oder am Prompt "$LANG"
eingeben soll.
Wie auch immer, beide Möglichkeiten durchprobiert, und es passiert : NICHTS

Was soll(te) den ausgegeben werden?

Mfg

FF
64748
64748 26.03.2013 um 13:40:04 Uhr
Goto Top
Naja, so schwierig ist es nicht. Die Variable $LANG enthält die Informationen über die locales. Wenn Du den obigen Befehl ausführst, also im Terminal (cygwin) ohne Anführungsstriche, so wie es da steht
echo $LANG
dann wird der Inhalt der Variablen angezeigt.
Wenn da nix angezeigt wird, dann ist die Variable nicht gesetzt. Mach mal
export LANG=de_DE.utf8
genau so!!! also LANG ohne $ und keine Leerzeichen vor und hinter dem =. Danach nochmal echo $LANG. Dann müsste die gesetzt sein. Danach kannst Du es mit Lochkartenstanzers sed-Kommando nochmal versuchen. Und von der Codepage hab ich keine Ahnung, das musst Du ggf. nochmal ausprobieren.

Markus
freckeldfrickler
freckeldfrickler 26.03.2013 um 13:45:31 Uhr
Goto Top
HH ! (Hallo hmarkus!)

Ich habe mal überlegt. Warum ist das wichtig, was am bash-prompt $LANG ausgibt?

Ich war bisher der Annahme, dass die unter cygwin/bin vorhandenenen .exe-Dateien

"Standalone-Tools" sind, die unter Windows laufen. Das ist doch richtig so ? Kann das mal jemand klar stellen ? Oder bin ich da auf einem falschen Dampfer?

Grüsse

FF
Lochkartenstanzer
Lochkartenstanzer 26.03.2013 um 13:46:52 Uhr
Goto Top
In welcher Codierung liegen die Daten denn überhaupt vor?

Rufst Du sed in der cygwin-bash-Umgebung auf oder direkt aus der windows-CMD-Shell? das macht auch einen großen Unterschied.

lks
64748
64748 26.03.2013 um 13:50:12 Uhr
Goto Top
Zitat von @freckeldfrickler:
HH ! (Hallo hmarkus!)

Ich habe mal überlegt. Warum ist das wichtig, was am bash-prompt $LANG ausgibt?

Ich war bisher der Annahme, dass die unter cygwin/bin vorhandenenen .exe-Dateien

"Standalone-Tools" sind, die unter Windows laufen. Das ist doch richtig so ? Kann das mal jemand klar stellen ? Oder bin
ich da auf einem falschen Dampfer?

Grüsse

FF
Du hast ja oben geschrieben
"When using a program in a console window (command.com or cmd.exe) and setting LANG and LANGUAGE, you must also set the > correct {code page} with the {chcp} command; for Western European languages, code page {1252} usually suffices."]
Also scheint cygwin ja Wert auf die locales zu legen. Es geht ja hier um die korrekte Anzeige der Umlaute (die man besser nicht innerhalb von Dateinamen benutzt).

Markus
Lochkartenstanzer
Lochkartenstanzer 26.03.2013 um 13:50:21 Uhr
Goto Top
Zitat von @freckeldfrickler:
"Standalone-Tools" sind, die unter Windows laufen. Das ist doch richtig so ? Kann das mal jemand klar stellen ? Oder bin
ich da auf einem falschen Dampfer?

kommt drauf an wie die compiliert udn gelilnkt sind. Normalerweise kann man alles, was man gegen dir cygwin.dll liegt auch standalone laufen lasssen. Allerdings komt es im wesentlichen auch drauf an, ob und welche Umgebungsvariablen gesetzt sind. Die können sich durchaus deutlich von denen in einer cygwin-bash-umgebung unetrscheiden.

Deswegen arbeite ich normalerweise grundsätzlich in einer cygwin Umgebung, um vor Überraschungen gefeit zu sein.

lks
freckeldfrickler
freckeldfrickler 26.03.2013 um 14:01:29 Uhr
Goto Top
Hallo Markus,


hab ich jetzt gemacht: command not found ( im Übrigen auch bei ls , whoami, date, time ...)

Aber um auf meinen vorigen Beitrag zurückzukommen, denn ich habe das Gefühl, wir reden von 2 unterschiedlichen Sachen.

Ich will sed nicht unter der cygwin-bash ausführen,
sondern sed.exe unter der Windows-Shell...

Das ist doch meiner Meinung nach ganz was anderes ...
(nur letzteres kann ich doch direkt in .cmd verwenden.
64748
64748 26.03.2013 um 14:16:10 Uhr
Goto Top
Ach so, ich hatte nur gesehen, dass es um die LANG-Variable geht. Gibt es denn für sed.exe keine Gebrauchsanweisung?

Mir fällt übrigens auf, dass unter Linux der sed mit einfachen ' aufgerufen wird, nicht mit ", vielleicht ist da was falsch. Zunächst solltest Du versuchen, den Befehl mal ohne Umlaute auszuführen. Wenn das funktioniert, kannst Du es mit Umlauten versuchen.

Markus
freckeldfrickler
freckeldfrickler 26.03.2013 um 14:24:08 Uhr
Goto Top
Hallo lks, hallo Markus


normalerweise sollte sed.exe als Windows-executable doch funktionieren . . .

Ich denke, es ist nur eine Frage der Syntax. (Maskieren oder nicht maskieren, und wenn, wie ?

Da ich nach einer Lösung für sed.exe suche, weil ich dies in einer windows.cmd benötige, kommt eine komplette cygwin-Umgebung nicht in Frage. Auch wenn
dies in vielen Fällen sicherlich eine gute Lösung ist, "um vor Überraschungen gefeit zu sein".
Im Moment kämpfe ich noch für eine optimale Windows-Lösung um meine Zwischenablage zu filtern.
Wenn ich damit fertig bin, werde ich versuchen, eine Lösung für das Debian-System zu finden, da werde ich mich sicherlich noch genug mit sed beschäftigen müssen.
Ich bedanke mich herzlich für Eure Antworten,

FF
64748
64748 26.03.2013 um 14:32:04 Uhr
Goto Top
Unter Linux ist das beinahe schon trivial..... die sed-Kommandos von Lochkartenstanzer kannst Du so übernehmen, ersetze aber " durch '.

Für die Zwischenablage gibt's unter Linux auch Tools, mit denen man das bearbeiten kann, da musst Du mal ins Repository von Debian schauen. Hier ist z.B. eine Liste und hier mehr Infos dazu https://wiki.archlinux.org/index.php/Clipboard

Markus
freckeldfrickler
freckeldfrickler 26.03.2013 um 14:33:00 Uhr
Goto Top
Hallo Marcus von 14:16,

Nein, habe ich nirgendwo gefunden . . .
Ich meine so eine Auflistung der Parameter. Wahrscheinlich gelten im Prinzip die Linux-Kommandos.

Es gab nur eine Kurzanleitung irgendwo, dass Einzige was man dort entnehmen konnte, war der Hinweis, dass unter Win mit " " zu arbeiten ist.
Deshalb funktioniert, wie schon oben beschrieben, die Ersetzung von normalen Zeichen.
c:\cygwin\bin\sed -e  "s/O/U/g;s/A/E/g" c:\tmp\text > c:\tmp\text.new  
ersetzt alle O gegen U, alle A gegen E
c:\cygwin\bin\sed -e  "s/Ä/ae/g;s/?/_/g" c:\tmp\text > c:\tmp\text.new  
funktioniert aber nicht mit Umlauten oder Sonderzeichen .


FF
64748
64748 26.03.2013 um 14:36:02 Uhr
Goto Top
In der Dokumentation für die Installation von sed.exe unter Windows http://gnuwin32.sourceforge.net/install.html finde ich
Native-language support

Most GNU packages have the ability to output messages in several languages. This native-language support (NLS) requires the LibIntl and the LibIconv libraries. On MS-Windows they have been adapted so that NLS chooses the system language, unless the environment variables LANG and LANGUAGE have been set. The language codes (ISO 639) for these environment variables are different from the MS-Windows ones. When using a program in a console window (command.com or cmd.exe) and setting LANG and LANGUAGE, you must also set the correct code page with the chcp command; for Western European languages, code page 1252 usually suffices. You can change the default code page by changing the OEMCP value in the registry key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage

For other languages, such as those with a Cyrillic character set, NLS may not operate correctly, unless a TrueType font with these characters has been chosen. If you want to disable NLS, then set the environment variables LANGUAGE and LANG to en; then all messages will be in English.


Vielleicht hilft das.

Markus
freckeldfrickler
freckeldfrickler 26.03.2013 um 14:45:57 Uhr
Goto Top
Hallo Marcus,
hatte ich doch schon probiert .... (freckeldfrickler @ 12:51)

Das ging doch nicht . . .

So Leute,bedankt, ich mache jetzt erstmal Feierabend, d.h. ich muss noch etwas richtig arbeiten.

Grüsse

FF
freckeldfrickler
freckeldfrickler 26.03.2013 um 20:26:36 Uhr
Goto Top
Hallo format-c,

wie Du im weiteren Diskussionsverlauf sehen kannst, hatte ich das Script nachgebessert und es für perfekt erklärt.

Aber einen Fehler ist mir doch noch aufgefallen: Am Ende der umgewandelten Zeichenkette stehen immer noch / wieder 2 überflüssige Leerzeichen.
Ich habe schon alles nach versteckten Leerzeichen am Ende durchsucht, aber mir fällt nichts auf.
Woran könnte das liegen?

Jetzt haben wir so viel Zeit in dieses Script investiert, es wäre schön, wenn man die beiden überflüssigen Leerzeichen am Ende auch noch wegbekommen könnte.
Dann wäre das Script in meinen Augen perfekt.
Hast Du noch irgendeinen Vorschlag.

Herzliche Grüsse

FF
bastla
bastla 26.03.2013 um 20:42:56 Uhr
Goto Top
Hallo freckeldfrickler!

Versuch es mit den folgenden Zeilen (nach dem Prinzip "Leerzeichen nur, wenn unbedingt erforderlich"):
>~~~.txt echo(%zwischenablage%
rem ab in die Zwischenablage:
CLIP<~~~.txt	
del ~~~.txt
Grüße
bastla