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

Suche wort in .txt und lösche alles darüber!

Frage Entwicklung Batch & Shell

Mitglied: pnk001

pnk001 (Level 1) - Jetzt verbinden

07.08.2013, aktualisiert 13:33 Uhr, 2076 Aufrufe, 13 Kommentare, 3 Danke

Hallo,

Wollte mal fragen ob sowas mittels Batch realisierbar wäre. "Suche ein Wort in einer .txt und lösche alles was darüber steht."

Bsp:

Output.txt
01.
Auto 
02.
schnelles Mottorad  
03.
Kaputtes Fahrrad 
04.
Auto 
05.
LKW

Output.txt nach der bearbeitung der Batch
01.
Auto 
02.
LKW

hoffe das wäre möglich :P

Mit freundlichen Grüßen
Mitglied: Endoro
07.08.2013 um 13:48 Uhr
Hallo,
ja geht schon:
01.
for /f "delims=:" %%a in ('findstr /nc:"Kaputtes Fahrrad" file') do set "line=%%a" 
02.
<file more +%line%
lg.
Bitte warten ..
Mitglied: bastla
07.08.2013 um 14:30 Uhr
@ Endoro
... wobei offensichtlich nicht
lösche alles was darüber steht.
sondern "behalte alles was darunter steht" steht gemeint war, womit Dein Ansatz passt (ansonsten wäre es
for /f "delims=:" %%a in ('findstr /nc:"Kaputtes Fahrrad" file') do set /a line=%%a - 1
gewesen) ...

Grüße
bastla
Bitte warten ..
Mitglied: pnk001
08.08.2013, aktualisiert um 16:34 Uhr
soweit so gut :P

test.txt
01.
02.
03.
04.
05.
06.
07.
3
.bat
01.
for /f "delims=:" %%a in ('findstr /nc:"1" test.txt') do set /a line=%%a - 1 
02.
pause 
03.
<test.txt more +%line% 
04.
pause


ablauf:
01.
J:\test>for /F "delims=:" %a in ('findstr /nc:"1" test.txt') d 
02.
o set /a line=%a - 1 
03.
 
04.
J:\test>set /a line=4 - 1 
05.
 
06.
J:\test>set /a line=5 - 1 
07.
 
08.
J:\test>pause 
09.
Drücken Sie eine beliebige Taste . . . 
10.
 
11.
J:\test>more +4 0<test.txt 
12.
13.
14.
15.
 
16.
J:\test>pause 
17.
Drücken Sie eine beliebige Taste . . .

wie bekomme ich das nun hin das er mir die sachen aus der test.txt löscht? wäre es möglich die letzte 1. auch mit zu löschen?

Mit freundlichen Grüßen schonmal vielen dank
Bitte warten ..
Mitglied: bastla
08.08.2013, aktualisiert um 18:39 Uhr
Hallo pnk001!
wie bekomme ich das nun hin das er mir die sachen aus der test.txt löscht?
Aus der "test.txt" löschen kannst Du nicht, aber die "test.txt" nur mit den gewünschten Werten neu zu erstellen ist natürlich möglich.
wäre es möglich die letzte 1. auch mit zu löschen?
Natürlich - das war ja Endoros Ansatz (ohne -1) - ich hatte mich ja nur auf Deine konkrete Formulierung bezogen, und
alles was darüber steht.
inkludiert eben nicht die gesuchte Zeile selbst.

Kombiniert sähe das dann etwa so aus:
01.
@echo off & setlocal 
02.
set "Datei=test.txt" 
03.
set "Suche=1" 
04.
 
05.
set "Bak=%temp%\Tmp.tmp" 
06.
move "%Datei%" "%Bak%" 
07.
for /f "delims=:" %%a in ('findstr /nc:"%Suche%" "%Bak%"') do set /a line=%%a 
08.
<"%Bak%" >"%Datei%" more +%line%
Was noch zu klären bliebe ist, ob nach kompletten Zeilen oder nach dem Vorkommen des Suchstrings am Zeilenanfang oder irgendwo in der Zeile gesucht wird - entsprechend dann die "findstr"-Schalter "/nxc:" oder "/nbc:" oder "/nc:" verwenden.

Grüße
bastla
Bitte warten ..
Mitglied: pnk001
08.08.2013 um 20:16 Uhr
perfekt. du hast immer eine lösung parat danke dir ;)
Bitte warten ..
Mitglied: bastla
08.08.2013 um 20:21 Uhr
Hallo pnk001!

Freut mich, wenn's passt - aber den entscheidenden Teil hat ja Endoro beigetragen ...

Grüße
bastla
Bitte warten ..
Mitglied: Balegor
11.08.2013, aktualisiert um 17:40 Uhr
Hallo,
ich bin neu hier und bin kompletter neuling was .bat dateien angeht (muss mich damit im rahmen meiner ba beschäftigen) und würde mich gerne mal mit an den thread dranhängen, da es um was ähniches geht.
Ich würde gerne ab einem bestimmten string alles in der .txt löschen, hab aber nicht wircklich ne idee wie ich das was ihr hier schon gepostet hab umbauen soll
Bitte warten ..
Mitglied: rubberman
11.08.2013, aktualisiert um 18:35 Uhr
Hallo Balegor, willkommen im Forum.

Eigentlich solltest du schon deinen eigenen Thread aufmachen, aber naja ...

Es gibt unterschiedliche Ansätze. Hier mal, wie ich es erledigt hätte:

test.txt
01.
Lorem ipsum dolor sit amet, 
02.
consetetur sadipscing elitr, 
03.
sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, 
04.
sed diam voluptua. 
05.
 
06.
Ich bin die letzte Zeile. 
07.
Ich werde gelöscht. 
08.
 
09.
At vero eos et accusam et justo duo dolores et ea rebum. 
10.
Stet clita kasd gubergren, 
11.
no sea takimata sanctus est Lorem ipsum dolor sit amet.
*.bat
01.
@echo off &setlocal 
02.
set "file=test.txt" 
03.
set "search=Ich bin die letzte Zeile." 
04.
 
05.
set "lastline=" 
06.
for /f "delims=:" %%i in ('findstr /nc:"%search%" "%file%"') do if not defined lastline set "lastline=%%i" 
07.
if not defined lastline goto :eof 
08.
 
09.
setlocal EnableDelayedExpansion 
10.
<"!file!" >"!temp!\text.tmp" ( 
11.
  for /l %%i in (1 1 %lastline%) do ( 
12.
    set "ln=" &set /p "ln=" 
13.
    echo(!ln! 
14.
15.
16.
endlocal 
17.
 
18.
move "%temp%\text.tmp" "%file%"
Dateien werden in Batch zeilenweise abgearbeitet. Ggf. musst du dein
ab einem bestimmten string
noch weiter konkretisieren.

Grüße
rubberman
Bitte warten ..
Mitglied: Balegor
11.08.2013, aktualisiert um 19:31 Uhr
hmm bei deinem Bsp. funktioniert die .bat ohne Probleme, bei meiner .txt schreibt sie nur viele leere Zeilen ans Ende und macht ab und zu mitten im Wort nen Zeilenumbruch.
Meine Ausgangsdatei enthält sql befehle für db2 und ich möchte die Datei so umschreiben das sie ich sie mit postgresql nutzen kann, da postgresql aber ne ganze Reihe an Befehlen nicht kennt, wollt ich den Teil der Datei einfach "abschneiden". Der String an dem "abgeschnitten" werden soll ist einfach nur: "-- bis hier her", aber vorher kommen halt auch ne menge "@" Zeichen (weis nicht ob das nen Unterschied macht)

EDIT: der besagte string sollte dann auch mit abgeschnitten werden
Bitte warten ..
Mitglied: rubberman
11.08.2013 um 19:33 Uhr
Hallo Balegor.

Batch verarbeitet Textdateien im ASCII Zeichensatz. Bei meinem Beispiel kommt noch hinzu dass nur Windows-Zeilenumbrüche (0x0D 0x0A) akzeptiert werden und Zeilen nur bis zum 1023. Zeichen eingelesen werden.
Wo das Problem steckt weiß ich nicht, ohne deine Datei zu kennen. In einem HEX Editor solltest du das oben genannte aber herausfinden können.

Grüße
rubberman
Bitte warten ..
Mitglied: Balegor
11.08.2013, aktualisiert um 19:52 Uhr
also die Zeilenumbrüche sind alle 0A (ein Punkt im HEX Editor) und die Zeilen sind nie länger als 80 Zeichen

die Datei besteht halt zum größen Teil aus create table anweisungen wie hier und irgentwann kommt halt der string:

CREATE TABLE customer (
c_custkey INTEGER NOT NULL,
c_name VARCHAR(25),
c_address VARCHAR(40),
c_nationkey INTEGER NOT NULL,
c_phone CHAR(15),
c_acctbal DECIMAL(12, 2),
c_mktsegment CHAR(10),
c_comment VARCHAR(117),

CONSTRAINT customer_pk PRIMARY KEY(C_CUSTKEY),
CONSTRAINT nation_fk FOREIGN KEY(c_nationkey)
REFERENCES nation(n_nationkey) ON DELETE RESTRICT
)@
CREATE INDEX cust_name_idx ON customer(c_name)@
.
.
.
-- bis hier her

ab da soll alles inclusive des strings abgeschnitten werden
Bitte warten ..
Mitglied: rubberman
11.08.2013, aktualisiert um 20:53 Uhr
Hallo Balegor.

Man könnte MORE vorher die Zeilenumbrüche "normalisieren" lassen. Eine Zeile mehr wegzuschneiden ist auch nicht das Problem ...

Teste:
01.
@echo off &setlocal 
02.
set "file=test.txt" 
03.
set "search=-- bis hier her" 
04.
 
05.
<"%file%" >"%temp%\text.tmp" more 
06.
 
07.
set "lastline=" 
08.
for /f "delims=:" %%i in ('findstr /nc:"%search%" "%temp%\text.tmp"') do if not defined lastline set /a "lastline=%%i-1" 
09.
if not defined lastline goto :eof 
10.
 
11.
setlocal EnableDelayedExpansion 
12.
<"!temp!\text.tmp" >"!file!" ( 
13.
  for /l %%i in (1 1 %lastline%) do ( 
14.
    set "ln=" &set /p "ln=" 
15.
    echo(!ln! 
16.
17.
18.
del "!temp!\text.tmp"
Grüße
rubberman

Edit: Aufräumen vergessen
Bitte warten ..
Mitglied: Balegor
13.08.2013, aktualisiert um 19:19 Uhr
also ich hab jetzt bischen rumprobiert, da der 2te Vorschlag an meiner Ausgangsdatei rein gar nichhs geändert hat (weder Zeilen eingefügt wo sie nicht hinsollten, noch ab dem besagten String gelöscht). Dabei ist mir aufgefallen, das wenn ich meine .txt mit notepad++ öffne, sind die Zeilenumbrüche wie sei sein sollen (0A im hex editor), wenn ich die Datei aber mit dem windows editor öffne steht da alles hintereinander (viell ist das ja das problem) und die sinnlosen Zeilenumbrüche die die erste .bat verursacht hat, sind genau an den stellen wo die Zeile ganz hinten umspringt im windors editor. Ich hab jetzt mal manuell ein paar zeileumbrüche dort eingefügt und die sind 0D im hex editor. gibts ne möglichkeit die 0A Zeilenumbrüche automatisch zu 0D umbrücehn zu machen, da die Datei ziemlich längllich ist und das manuell zu machen wäre nicht ganz so lustig.

hat sich erledigt, hatte nen tippfehler -.- für meine anderen fragen mach ich mal nen eigenen thread auf
thx erstmal für die hilfe rubberman
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Webentwicklung
gelöst HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

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