Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

String ersetzen , Doppelpunkt und senkrechten Strich durch Unterstrich

Frage Entwicklung Batch & Shell

Mitglied: freckeldfrickler

freckeldfrickler (Level 1) - Jetzt verbinden

20.03.2013 um 15:05 Uhr, 5233 Aufrufe, 26 Kommentare, 4 Danke

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
01.
"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.

01.
if not exist senkrechten_strich_ersetzen.cmd goto error 
02.
@echo off &setlocal 
03.
echo ersetzt die Umlaute u. ß  
04.
rem  Leerzeichen,senkrechtenStrich,FragezeichenimString  
05.
echo. 
06.
echo. verwendbar im Datei-aspeichern-Dialog 
07.
echo  Diese Datei ist mit einem Short-Cut (zu) versehen ! 
08.
 
09.
rem  benötigt die Datei : senkrechten_strich_ersetzen.cmd 
10.
   
11.
  
12.
  
13.
  set "ae=ae" 
14.
  set "oe=oe" 
15.
  set "ue=ue" 
16.
  set "ß=ss" 
17.
   
18.
  
19.
set clip= 
20.
REM User Input 
21.
rem set /p "dat=Datei: " 
22.
sfk151.exe fromclip > ~~~.txt 
23.
 
24.
 
25.
for /F "delims=" %%i in (~~~.txt) do if not defined zeile set "zeile=%%i" 
26.
echo ZEILE ist %Zeile% 
27.
call senkrechten_strich_ersetzen.cmd 
28.
set line=%ZEILE% 
29.
REM Umleitung erfolgt in eine temporäre Datei 
30.
>"temp.txt~" ( 
31.
  REM Datei Zeile für Zeile abarbeiten. 
32.
  REM FINDSTR sucht alle Zeilen, die einen Zeilenanfang haben (also alle) 
33.
  REM  und setzt eine Zeilennummer + Doppelpunkt davor um sicher zu 
34.
  REM  stellen, dass auch Leerzeilen verarbeitet werden. 
35.
  rem for /f "delims=" %%i in ('findstr /n "^" "%dat%"') do ( 
36.
    REM String einer Variablen zuordnen. 
37.
   rem set "line=%%i" 
38.
    REM Verzögerte Variablenerweiterung einschalten. 
39.
    setlocal enabledelayedexpansion 
40.
      REM Zeilennummer und Doppelpunkt entfernen 
41.
      set "line=!line:*:=!" 
42.
      REM Prüfen, ob die Zeile leer ist. 
43.
      if "!line!"=="" ( 
44.
        REM Wenn ja, Leerzeile ausgeben. 
45.
        echo( 
46.
      ) else ( 
47.
        REM Wenn nein, Ersetzungen durchführen und Zeile ausgeben. 
48.
        set "line=!line:ä=%Ae%!" 
49.
        set "line=!line:ö=%Oe%!" 
50.
        set "line=!line:ü=%ue%!" 
51.
        set "line=!line:Ä=%Ae%!" 
52.
        set "line=!line:Ö=%Oe%!" 
53.
        set "line=!line:Ü=%Ue%!" 
54.
        set "line=!line:ß=%ss%!" 
55.
        rem ersetze Leerzeichen 
56.
        set "line=!line: =_!% 
57.
 
58.
        rem wie ersetzt man "|" ?     bsp.: set @FeldTrenner  = geht nicht "<|>",'<|>', "^|"? 
59.
        rem set "line=!line:'^|'=%_%!"   ANTWORT - DURCH EIN vbs-Script 
60.
        rem und wie ersetzt man den Doppelpunkt ?????? 
61.
           
62.
 
63.
        echo(!line:ß=%ss%! 
64.
65.
    REM Verzögerte Variablenerweiterung ausschalten. 
66.
    endlocal 
67.
68.
69.
  
70.
REM Originaldatei durch die temporäre Datei überschreiben. 
71.
rem move "temp.txt~" "%dat%" 
72.
move "temp.txt~" ERGEBNIS.~~~ 
73.
for /F "delims=" %%x in (ERGEBNIS.~~~) do if not defined zeile set "neuezeile=%%x" 
74.
rem %neuezeile% |sfk151.exe toclip      (ab ins clipboard) 
75.
CLIP <  ERGEBNIS.~~~ 
76.
del ERGEBNIS.~~~ 
77.
del ~~~.txt 
78.
goto end 
79.
:error 
80.
cls 
81.
echo. 
82.
echo Die Datei 
83.
echo                  senkrechten_strich_ersetzen.cmd 
84.
echo                                                   wurde nicht gefunden. 
85.
echo. 
86.
echo  Skript wird abgebrochen ! 
87.
pause 
88.
goto end: 
89.
:end
senkrechten_strich_ersetzen.cmd:

01.
rem ersetzt in einem String das | durch _ 
02.
@echo off & setlocal  
03.
set "Datei=c:\mako\~~~.txt"  
04.
 
05.
set R=%temp%\Replacer.vbs  
06.
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"): T=fso.OpenTextFile("%Datei%").ReadAll: fso.CreateTextFile("%Datei%",True).Write Replace(T,"|","_")   
07.
cscript //nologo %R% 
08.
 
09.
set R=%temp%\Replacer.vbs  
10.
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"): T=fso.OpenTextFile("%Datei%").ReadAll: fso.CreateTextFile("%Datei%",True).Write Replace(T,"?","_")   
11.
cscript //nologo %R% 
12.
set R=%temp%\Replacer.vbs  
13.
  
14.
 


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 ( 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
26 Antworten
Mitglied: Lochkartenstanzer
20.03.2013, aktualisiert 25.03.2013
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;"
Bitte warten ..
Mitglied: hmarkus
20.03.2013, aktualisiert um 23:02 Uhr
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
Bitte warten ..
Mitglied: Endoro
21.03.2013 um 00:52 Uhr
Hallo,

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

01.
@echo off &setlocal 
02.
set "string=|bla|bla|:bla" 
03.
set "string=%string:|=_%" 
04.
echo %string% 
05.
endlocal
.. output:
01.
_bla_bla_:bla
Für den Rest schaust du hier: http://www.dostips.com/forum/viewtopic.php?f=3&t=1485

bb
Bitte warten ..
Mitglied: format-c
22.03.2013, aktualisiert um 05:07 Uhr
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.
Bitte warten ..
Mitglied: format-c
22.03.2013, aktualisiert um 05:09 Uhr
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
Bitte warten ..
Mitglied: freckeldfrickler
25.03.2013 um 13:18 Uhr
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 (http://www.administrator.de/forum/anf%C3%BChrungszeichen-per-batch-aus- ...) 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":

01.
 
02.
@echo off 
03.
del ~~~.txt 
04.
rem  
05.
echo direkt in speicher lesen funkt: 
06.
for /f "tokens=*" %%a in ('sfk151.exe fromclip') do set "zwischenablage=%%a"  
07.
 
08.
set zwischenablage="%zwischenablage:|=_%"  
09.
set zwischenablage="%zwischenablage::=_%" 
10.
set zwischenablage="%zwischenablage:ä=ae%" 
11.
set zwischenablage="%zwischenablage:ö=oe%" 
12.
set zwischenablage="%zwischenablage:ü=ue%" 
13.
set zwischenablage="%zwischenablage:Ä=Ae%" 
14.
set zwischenablage="%zwischenablage:Ö=Ue%" 
15.
set zwischenablage="%zwischenablage:Ü=Ue%" 
16.
set zwischenablage="%zwischenablage: =_%" 
17.
echo "%zwischenablage%"  >> ~~~.txt 
18.
rem ohne die Umleitung nach ZW erhielte man eine mehrzeilige ~~~.txt 
19.
set ZW="%zwischenablage%" 
20.
echo kontrolle: Schau in  ~~~.txt ! 
21.
echo %ZW% > ~~~.txt 
22.
pause 
23.
rem die Zeichenkette    väöü| :ÄÖÜ    ergibt:  
24.
rem """"""""""vaeoeue___AeUeUe____"_"""""""""   
25.
rem bis auf die vielen "" und das letzte "_"  wäre das Ergebnis korrekt. 
26.
rem darum funktioniert (vermutlich) nächstes wohl auch nicht: 
27.
 
28.
rem darum (als Versuch): 
29.
endlocal 
30.
@echo off & setlocal enableDelayedExpansion  
31.
echo schau in ~~~.txt 
32.
 
33.
rem ersetzen nach "Biber": 
34.
pause 
35.
for /f "delims=" %%i in (~~~.txt) do (  
36.
 
37.
 
38.
 
39.
   set "line=%%i"   
40.
rem soll _"_" durch nichts ersetzen: 
41.
   echo !line:_^"_"^=! 
42.
  
43.
pause 
44.
)  
45.
for /f "delims=" %%i in (~~~.txt) do (  
46.
 
47.
 
48.
 
49.
   set "line=%%i"   
50.
 
51.
 
52.
 
53.
rem soll " durch nichts ersetzen: 
54.
   echo !line:"=!  
55.
 
56.
pause 
57.
)  
58.
 
59.
%zwischenablage% | sfk151.exe toclip 
60.
set zwischenablage= 
61.
 
62.
 
Bitte warten ..
Mitglied: format-c
25.03.2013 um 17:11 Uhr
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:
01.
c:\>set test=abc 
02.
 
03.
c:\>set test 
04.
test=abc 
05.
 
06.
c:\>set test="abc" 
07.
 
08.
c:\>set test 
09.
test="abc" 
10.
 
11.
c:\>set "test=abc" 
12.
 
13.
c:\>set test 
14.
test=abc 
15.
 
16.
c:\>set test_mit_Leerzeichen_am_Ende="abc" 
17.
 
18.
c:\>echo -%test_mit_Leerzeichen_am_Ende%- 
19.
-"abc" -

Grüße
format-c
Bitte warten ..
Mitglied: freckeldfrickler
25.03.2013 um 20:17 Uhr
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

01.
 
02.
 @echo off  
03.
  
04.
 
05.
  
06.
 
07.
echo direkt in Speicher lesen funkt:  
08.
 
09.
 
10.
for /f "tokens=*" %%a in ('sfk151.exe fromclip') do set "zwischenablage=%%a" 
11.
 
12.
rem ersetze die gewuenschten Zeichen: 
13.
 
14.
set "zwischenablage=%zwischenablage:|=_%" 
15.
 
16.
 
17.
 
18.
set "zwischenablage=%zwischenablage::=_%" 
19.
 
20.
 
21.
 
22.
set "zwischenablage=%zwischenablage:ä=ae%" 
23.
 
24.
 
25.
 
26.
set "zwischenablage=%zwischenablage:ö=oe%" 
27.
 
28.
 
29.
 
30.
set "zwischenablage=%zwischenablage:ü=ue%" 
31.
 
32.
 
33.
 
34.
set "zwischenablage=%zwischenablage:Ä=Ae%" 
35.
 
36.
 
37.
 
38.
set "zwischenablage=%zwischenablage:Ö=Ue%" 
39.
 
40.
 
41.
set "zwischenablage=%zwischenablage:Ü=Ue%" 
42.
 
43.
 
44.
set "zwischenablage=%zwischenablage:ß=ss%" 
45.
 
46.
 
47.
set "zwischenablage=%zwischenablage:?=_%" 
48.
 
49.
 
50.
set "zwischenablage=%zwischenablage: =_%" 
51.
 
52.
 
53.
rem ohne die Umleitung nach ZW erhielte man eine mehrzeilige ~~~.txt: 
54.
echo %zwischenablage% >> ~~~.txt  
55.
 
56.
   
57.
 
58.
rem ab in die Zwischenablage: 
59.
CLIP < ~~~.txt	 
60.
del ~~~.txt 
61.
  
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?

01.
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 !
Bitte warten ..
Mitglied: Lochkartenstanzer
25.03.2013, aktualisiert um 21:11 Uhr
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;"
Bitte warten ..
Mitglied: freckeldfrickler
26.03.2013 um 12:51 Uhr
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
01.
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
Bitte warten ..
Mitglied: hmarkus
26.03.2013 um 13:16 Uhr
Was wird denn angezeigt, wenn Du unter cygwin
echo $LANG
ausführst?

Markus
Bitte warten ..
Mitglied: freckeldfrickler
26.03.2013 um 13:31 Uhr
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?

Mit freundlichen Grüßen

FF
Bitte warten ..
Mitglied: hmarkus
26.03.2013 um 13:40 Uhr
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
Bitte warten ..
Mitglied: freckeldfrickler
26.03.2013 um 13:45 Uhr
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
Bitte warten ..
Mitglied: Lochkartenstanzer
26.03.2013 um 13:46 Uhr
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
Bitte warten ..
Mitglied: hmarkus
26.03.2013 um 13:50 Uhr
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
Bitte warten ..
Mitglied: Lochkartenstanzer
26.03.2013 um 13:50 Uhr
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
Bitte warten ..
Mitglied: freckeldfrickler
26.03.2013 um 14:01 Uhr
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.
Bitte warten ..
Mitglied: hmarkus
26.03.2013 um 14:16 Uhr
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
Bitte warten ..
Mitglied: freckeldfrickler
26.03.2013 um 14:24 Uhr
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
Bitte warten ..
Mitglied: hmarkus
26.03.2013 um 14:32 Uhr
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
Bitte warten ..
Mitglied: freckeldfrickler
26.03.2013 um 14:33 Uhr
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.
01.
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
01.
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
Bitte warten ..
Mitglied: hmarkus
26.03.2013 um 14:36 Uhr
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
Bitte warten ..
Mitglied: freckeldfrickler
26.03.2013 um 14:45 Uhr
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
Bitte warten ..
Mitglied: freckeldfrickler
26.03.2013 um 20:26 Uhr
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
Bitte warten ..
Mitglied: bastla
26.03.2013 um 20:42 Uhr
Hallo freckeldfrickler!

Versuch es mit den folgenden Zeilen (nach dem Prinzip "Leerzeichen nur, wenn unbedingt erforderlich"):
01.
>~~~.txt echo(%zwischenablage% 
02.
rem ab in die Zwischenablage: 
03.
CLIP<~~~.txt	 
04.
del ~~~.txt
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Poweshell Script soll String ersetzen und die leere Zeile löschen (4)

Frage von Mars123 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell String Suchen mit Wildcard und Ersetzen (6)

Frage von herrmanndominic zum Thema Batch & Shell ...

Batch & Shell
gelöst String mit Zeilenumbruch per Bash ersetzen (1)

Frage von StefanKittel zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...