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
GELÖST

Powershell replace befehl?

Frage Microsoft

Mitglied: Thomas86

Thomas86 (Level 1) - Jetzt verbinden

27.06.2011 um 16:22 Uhr, 9460 Aufrufe, 8 Kommentare

Ich bin absoluter neuling mit powershell und versuche folgende Probleme in den griff zu bekommen.

Ich versuche eine txt dateien mit Powershell zu verändern und zwar muss folgendes verändert werden

1. Am ende jeder Zeile brfindet sich ein " ; " und das muss weg

2. die Erste Zeile soll gelöscht werden

bisher habe ich nur das hier


$Quelle="U:\Documents\DATEI.txt"
$Ziel="U:\Documents\DATEI.neu.txt"
$Datei = Get-ChildItem $Quelle
foreach ($String in $Datei)
{

$Inhalt = Get-Content -Path $String


$Inhalt | foreach {$_ -replace ";"," "}| Out-File -FilePath $Ziel -encoding Default
}

Das problem ist es verändert alle Smikolons.

Und wie man die erste Zeile löscht weis ich absolut nicht

Vielen Dank für eure hilfe
Mitglied: TsukiSan
27.06.2011 um 16:38 Uhr
Hallo Thomas86,

ich kann dir nur indirekt helfen bezüglich Powershell, weil ich damit nicht arbeite.
1. Am ende jeder Zeile brfindet sich ein " ; " und das muss weg
Normalerweise kennen diese Scriptsprachen etwas wie:
01.
MeinText = "blablabla ;" 
02.
if Right$(MeinText, 1) = ";" then MeinText = Left$(MeinText, (Len(MeinText) -1))
o.s.ä.

2. die Erste Zeile soll gelöscht werden
auch bei Powershell müßte es etwas geben, womit man eine Datei komplett einlesen kann und dann die erste Zeile ausradiert.
Beispiel in anderer Scriptsprache:
01.
MeineZeilen = Split(FSO.opentextfile(MeineDatei).ReadAll,vbcrlf) 
02.
For i = 1 to Ubound(MeineZeilen) 
03.
           Write (blablabla(i)) 
04.
Next 
05.
.close 
06.
'etc
eventuell hilt dir das etwas weiter, sich mit Powershell auseinander zu setzen. Suche dir die Befehle raus, wie sie bei Powershell lauten
also: Split , LEFT oder RIGHT etc. , dann müßte es leicht funktionieren.

Das problem ist es verändert alle Smikolons.
Das hat der Replace-Befehl so ansich

Gruss
Tsuki
Bitte warten ..
Mitglied: Thomas86
27.06.2011 um 16:53 Uhr
MeinText = "blablabla ;"

Das kann ich so einfach nicht definieren, da der Text an sich 100.000 zeilen hat, er soll mit die txt datei als eine neue txt datei ausgeben.
Und die befehle Left und Right finde ich nicht.



01.MeineZeilen = Split(FSO.opentextfile(MeineDatei).ReadAll,vbcrlf)
02.For i = 1 to Ubound(MeineZeilen)
03. Write (blablabla(i))
04.Next
05..close
06.'etc

hier weiß ich auch nicht wie das mit dem Write(blablabla(i)) bei einem so großen text funktionieren soll?

Aber danke du hast mir schonmal stoff gegeben zu rumprobieren.

Was halt gut wäre, wenn ich es irgendwie in meinen Zeilein (siehe frage) einbringen kann
Bitte warten ..
Mitglied: TsukiSan
27.06.2011 um 17:08 Uhr
Hallo Thomas86,

nochmal: ich kann dir bei den direkten Befehlen in Powershell nicht helfen, da ich sie nicht weiß.
du weißt da weitaus mehr!
Mach folgendes:
Datei öffnen und splitten und als SplitMerkmal nimmst du den Zeilenumbruch
Das ganze schreibt sich dann in eine Variable, welche ein Array sein müßte.
Nun hast du alle Zeilen in einem Array (von mir aus 100.000 Zeilen -> Ubound von diesem Array wäre dann 99.999)
Dann checkst du jede Zeile einzeln und entfernst ganz rechts das Zeichen ; , falls vorhanden.
Zum Schluss schreibst du die Daten in deine neue Datei und fängst ganz einfach bei 1 an zu starten,
weil die Arrays fangen bei NULL an!
Dann hast du alle Fliegen mit einer Klappe erschlagen!
In Powershell kann ich dir's nicht aufschreiben. Aber eventuell mal ein Beispiel in VBS:
01.
Dim FSO 
02.
Dim DateiOriginal , DateiNeu 
03.
DateiOriginal = "U:\Documents\DATEI.txt" 
04.
DateiNeu = "U:\Documents\DATEI.neu.txt"  
05.
 
06.
Set FSO = CreateObject("Scripting.FileSystemObject") 
07.
MeineZeilen = Split(FSO.opentextfile(DateiOriginal).ReadAll,vbcrlf) ' vbcrlf = Zeilenumbruch! 
08.
 
09.
For i = 1 to Ubound(MeineZeilen) ' somit fangen wir bei Zeile 2 erst an, mitzuschreiben! 
10.
      temp = MeineZeilen(i) 
11.
      if Right(temp, 1) = ";" then temp = Left(temp, (Len(temp) -1)) 
12.
      temp = temp & vbcrlf 
13.
Next 
14.
 
15.
MeineDateiNeu = FSO.CreateTextFile(DateiNeu,True).Write (temp)
Ungetestet und nur als Beispiel gedacht!!!!

Gruss
Tsuki
Bitte warten ..
Mitglied: mathe172
27.06.2011 um 17:21 Uhr
Hallo,

für das Replacen der ; hätte ich eine Idee, auch wenn ich mich nicht so mit Powershell auskenne:
Man könnte einfach sagen er soll alle Sekimkolons gefolgt von einem Zeilenumbruch/CrLf/010 013 (oder umgekehrt) durch einen simplen Zeilenumbruch ersetzen.
Also etwa MeinText.Replace(";" & vbcrlf,vbcrlf) in Powershellcode

Mathe172
Bitte warten ..
Mitglied: bastla
27.06.2011 um 17:27 Uhr
@Tsuki
Anstatt immer den gesamten "temp"-String behandeln zu müssen würde ich nur die jeweilige Zeile kürzen, also etwa:
01.
For i = 1 to Ubound(MeineZeilen) ' somit fangen wir bei Zeile 2 erst an, mitzuschreiben!      
02.
    L = Len(MeineZeilen(i)) 
03.
    If Right(MeineZeilen(i), 1) = ";" Then L = L - 1 
04.
    temp = temp & Left(MeineZeilen(i), L) & vbCrLf 
05.
Next
Ansonsten hätte der Vorschlag von mathe172 einiges für sich (besonders, wenn es um 100.000 Zeilen geht) ...

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
27.06.2011 um 17:37 Uhr
@bastla,
joh, das geht auch einfacher Da gebe ich dir Recht! Danke für den Hinweis!
@mathe172
auch 'ne super Idee! Das stimmt! Warum nicht gleich das rechte Semiklolon in einen Zeilenumbruch verwandeln.
Noch einfacher

Wenn der TO jetzt noch jemanden findet, der unsere Ideen nach Powershell konvertiert, ist er sicher ganz glücklich

Gruss
Tsuki
Bitte warten ..
Mitglied: Thomas86
27.06.2011 um 17:40 Uhr
Wie TsukiDan richtig erkannt hat bin ich grade am verrückt werden um es in Powershell zu konvertieren,

ich selber bekomme nur error zu lesen
Bitte warten ..
Mitglied: Thomas86
27.06.2011 um 18:53 Uhr
Also ich hab jetzt das Problem

Nr. 2 gelöst und zwar so

$Quelle="U:\Documents\PRDO.helaba_Fallback_out.txt"
get-content $Quelle |
select -Skip 1 |
set-content "$Quelle-temp"
move "$Quelle-temp" $Quelle -Force

Das Problem Nr. 1

Da bin ich jetzt die schiene von Mathe172 gefahren, allerdings habe ich einen befehl gefunden mit dem ich sagen kann, dass er das letzte zeichen löschen soll, dass
sieht dann so aus

$Quelle="U:\Documents\PRDO.helaba_Fallback_out.txt"
$Ziel="U:\Documents\PRDO.helaba_Fallback_out_kon.txt"

get-Content $Quelle |

foreach-object {$_.TrimEnd(';')| Out-File -FilePath $Ziel}



Das problem das ich jetzt habe ist, dass er mir die änderung nur für die letzte zeile ausspuckt und die andern löscht er dannach

Ich müsste etwas an der Out-File ändern oder so, könnt ihr mir da nochmal helfen, aber dieses mal ohne drei "!!!" hehe

vielen Dank
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
PowerShell-Befehl zum mounten einer tib Datei gesucht (7)

Frage von Koopaaa zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell Hashtable to Übersichtliche Darstellung (2)

Frage von Marabunta zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...