Top-Themen

Aktuelle Themen (A bis Z)

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

Batch mit sed - Zeilenumbruch?

Frage Entwicklung Batch & Shell

Mitglied: dol123

dol123 (Level 1) - Jetzt verbinden

26.07.2007, aktualisiert 01.08.2007, 12669 Aufrufe, 17 Kommentare

Ich erstelle mit der Druckfunktion eines Programms eine ASCII Datei (ANSI) in der ich mit dem sed Befehl bestimmte Zeichen ersetzen und in eine neue Datei schreiben lasse. In dieser gibt es dann jedoch keinen Zeilenumbruch mehr. Dadurch ist der Aufbau der Datei total verändert.

Wie könnt ich das umgehen? Ich hab schon versucht am Ende jeder Zeile eine Variable auszugeben, die ich dann ebenfalls durch einen Zeilenumbruch ersetzen lasse.

Falls jemand eine Lösung mit der find funktion kennt: ich müsste ; S ; durch ; + ; und ; H ; durch ; - ; ersetzen.

Bin für jede Hilfe dankbar!

dol123
Mitglied: bastla
26.07.2007 um 14:12 Uhr
Hallo dol123!

Sollte sich etwa so machen lassen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Datei=C:\test.txt" 
03.
set "Von1=; S ;" 
04.
set "Nach1=; + ;" 
05.
set "Von2=; H ;" 
06.
set "Nach2=; - ;" 
07.
set "t=%temp%\text.tmp" 
08.
if exist "%t%" del "%t%" 
09.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set "Line=!Line:%Von1%=%Nach1%!" & set "Line=!Line:%Von2%=%Nach2%!" & echo !Line!>>"%t%" 
10.
move "%t%" "%Datei%"
Bitte beachten: Die neue Version ersetzt die ursprüngliche Datei - wenn nicht gewünscht, in die Zeile set "t=..." den neuen Dateinamen eintragen und die letzte Zeile ersatzlos streichen.

Grüße
bastla
Bitte warten ..
Mitglied: geTuemII
26.07.2007 um 14:18 Uhr
Meine Glaskugel ist gerade noch nicht vom polieren zurück....

Bist du mit sed unter Linux unterwegs oder sind es die Unixtools for Windows? Wie sieht denn dein Befehl/Script aus? Setzt du evtl. irgendwo das Newline in ein space um: The sequence \n matches a newline character in the pattern space, except the terminating new line.

geTuemII
Bitte warten ..
Mitglied: dol123
26.07.2007 um 14:45 Uhr
@ bastla: Danke für die schnelle Hilfe - werd ich gleich mal testen

@ geTuemII: Das ganze läuft unter Windows XP (SP2) in einem DOS-Fenster. Den sed-Befehl hab ich aus dem Internet runtergeladen - GnuWin32.
Zeile 1 (funktioniert so weit auch): sed "s/ S / + /g" test1.txt>test2.txt
Test2.txt hat dann allerdings schon keine Zeilenumbrüche mehr.

Hab zum testen an jedem Zeilenende mal zw abgesetzt und wollet mit
sed "s/zw/\n/g" test1.txt>jmtest2.txt den Zeilenwechsel einfügen. Hat allerdings gar nichts gebracht!?

MfG
dol123
Bitte warten ..
Mitglied: bastla
26.07.2007 um 14:51 Uhr
Hallo dol123!

Gerade mit GNU sed version 3.02.80 (etwa von hier) mit folgender Zeile getestet und kein Problem entdeckt:
01.
sed "s/ S / + /";"s/ H / - /" test1.txt>test2.txt
Grüße
bastla

P.S.: ... und ist natürlich eleganter als die Batch-Version.
Bitte warten ..
Mitglied: geTuemII
26.07.2007 um 14:56 Uhr
@bastla:
P.S.: ... und ist natürlich eleganter als die Batch-Version

Ist schließlich auch ein UNIX-Tool Hybscher ist nur noch vi.

geTuemII
Bitte warten ..
Mitglied: bastla
26.07.2007 um 15:00 Uhr
@geTuemII

Keinerlei Widerspruch ...

Grüße
bastla
Bitte warten ..
Mitglied: dol123
26.07.2007 um 15:04 Uhr
Also Batch mit find funktioniert - nochmals DANKE !

mit dem send Befehl hab ich wieder das Problem mit den nicht vorhanden Zeilenumbrüchen.
Am Ende einer Zeile steht nur ein "kleines Quadrat", dann folgt sofort die zweite Zeile (bis zum Seitenende).

MfG
dol123
Bitte warten ..
Mitglied: bastla
26.07.2007 um 15:07 Uhr
@dol123

Wo fandest Du "find" in meinem Batch?

Grüße
bastla
Bitte warten ..
Mitglied: geTuemII
26.07.2007 um 15:17 Uhr
Das "kleine Quadrat" ist der Zeilenumbruch, der wird nur unter Windows anders als unter Unix interpretiert. Daher mußt du das Unix-Newline durch ein Windows-Newline ersetzen, damit der Text zb. im Windows-Editor richtig dargestellt wird.

@bastla:
Hast du gerade die Zeichencodes im Kopf?

geTuemII
Bitte warten ..
Mitglied: bastla
26.07.2007 um 15:23 Uhr
@geTuemII

Du meinst sicher Chr(13) und Chr(10) vs nur Chr(10) ...

Grüße
bastla
Bitte warten ..
Mitglied: dol123
27.07.2007 um 11:35 Uhr
Um das ganze nun abschließen zu können bräuchte ich noch eine weitere Funktion:

Ich müsste die Anzahl der Zeilen ermitteln lassen und mit dieser einen entspr. abgesetzten Platzhalter (z.B. ANZ) ersetzen.

Das ganze ebenfalls per Batch.

Könnt ihr mir da noch einmal weiterhelfen??

Ein sehr dankbarer
dol123
Bitte warten ..
Mitglied: bastla
27.07.2007 um 11:46 Uhr
Hallo dol123!

Füge dem Batch von oben diese Zeile hinzu:
01.
for /f "delims=:" %%i in ('findstr /n . "%Datei%"') do set /a ANZ=%%i
"findstr" kann mit "/n" Zeilennummern vergeben, und durch das Suchkriterium "." werden alle Zeilen berücksichtigt.

Bei jedem Schlelifendurchlauf wird die Nummer der aktuellen Zeile in der Variable ANZ (durch das "/a" wird diese als numerisch deklariert) gespeichert, so dass nach dem letzten Durchlauf die Nummer der letzten Zeile gespeichert ist.

Grüße
bastla
Bitte warten ..
Mitglied: dol123
27.07.2007 um 12:33 Uhr
Danke fürs Antworten bastla

Funktioniert allerdings (bei mir) noch nicht.
Müssen die Zeilen mit einem Punkt enden?
Wie bzw. in welchem Format muss das ANZ in der Textdatei abgesetzt werden damit es durch die Zeilenanzahl ersetzt wird? Am Ende der Datei steht bei mir folgendes: 30 ; ANZ ; 123456 ;

MfG
dol123
Bitte warten ..
Mitglied: bastla
27.07.2007 um 12:54 Uhr
Hallo dol123!

Ich hatte Dich leider missverstanden ...

Die angegebene Zeile ermittelt die Anzahl und speichert sie (vorerst) nur in eine Variable. Dabei kann die Ausgangsdatei völlig unverändert bleiben (Zeilen müssen auch nicht mit "." enden).

Steht die von Dir angeführte Beispielszeile
01.
30 ; ANZ ; 123456 ;
tatsächlich so und als letzte Zeile in der Datei, und wenn ja, muss sie mitgezählt werden?

Grüße
bastla
Bitte warten ..
Mitglied: dol123
27.07.2007 um 13:04 Uhr
Hallo Bastla,

die von mir genannte Beispielzeile ist die letzte Zeile (Summenzeile) und soll nicht mitgezählt werden. Alle anderen Zeilen beginnen jedoch mit 10 ; 33 ; ......

Also könnte man die gewollte Anzahl durch zählen von 10 ; 33 ermitteln und dann die Zeichenfolge ANZ (in der Datei) durch den Inhalt der Variable ANZ ersetzen lassen - oder??

Wünsch dir ein schönes Wochenende!

MfG
dol123
Bitte warten ..
Mitglied: bastla
27.07.2007 um 15:03 Uhr
Hallo dol123!

Mit etwas verändertem Algorithmus, aber hoffentlich gewünschtem Ergebnis, sieht der Batch jetzt so aus:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Datei=C:\test.txt" 
03.
set "Von1=; S ;" 
04.
set "Nach1=; + ;" 
05.
set "Von2=; H ;" 
06.
set "Nach2=; - ;" 
07.
 
08.
set "t=%temp%\text.tmp" 
09.
if exist "%t%" del "%t%" 
10.
set /a ANZ=0 
11.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine 
12.
move "%t%" "%Datei%" 
13.
goto :eof 
14.
 
15.
:ProcessLine 
16.
echo %Line%|findstr /b "10 ; 33 ;">nul && set /a ANZ+=1 
17.
set "Line=!Line:%Von1%=%Nach1%!" 
18.
set "Line=!Line:%Von2%=%Nach2%!" 
19.
set "Line=!Line:ANZ=%ANZ%!" 
20.
(echo %Line%)>>"%t%"
Grüße
bastla
Bitte warten ..
Mitglied: dol123
01.08.2007 um 12:02 Uhr
Hallo bastla,

muss dich leider noch einmal belästigen. Aber ich erhalte beim Ausführen der Batch immer die Meldung "0" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Hast du eine Ahnung woran das liegen kann? In der Textdatei sind einige Felder mit Null gefüllt (Format: ; 0 ;) - dies sollte doch kein Problem darstellen?

MfG
dol123
Bitte warten ..
Ähnliche Inhalte
Windows Tools
Zeilenumbruch via Batch in eine Txtdatei einbauen
gelöst Frage von Ironhead-HaynsWindows Tools6 Kommentare

Hallo zusammen, ich bräuchte mal wieder einen Tipp! Ich bekomme von einem Externem eine Datei geliefert, diese beinhaltet eine ...

Batch & Shell
Zeilenumbruch-Zeilen-Vorschub entfernen? (Batch)
gelöst Frage von clragonBatch & Shell9 Kommentare

Hallo Leute, Ich bin's wieder, mit einem verzwickten Problem. Und ich hab folgendes Problem Ich habe eine riesige Logfile ...

Batch & Shell
Per Batch Zeichen in Textdatei durch zeilenumbruch ersetzen
Frage von CreamyCewieBatch & Shell3 Kommentare

Hallo, ich habe folgende textdatei (test.txt) "þUEBERþNþSKZþBELþVARTþ3þaaþ5 þacþL þadþ20150385#umbr# UEBERþNþBELDATER" ich brauche nun ein Batch-Script welches mir die gesamte TXT-Datei ...

CSS
Zeilenumbruch ohne br
gelöst Frage von ANTiNATORCSS2 Kommentare

Ich habe einen <div> in den durch ein phpscript der Inhalt einer Textdatei eingegeben wird. Welcher wiederum aus einem ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 16 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 19 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...