Avatar billede aggemamme Nybegynder
27. april 2006 - 06:48 Der er 8 kommentarer og
1 løsning

Søge/erstatte i stor (3,5 GB) fil

Hej

jeg skal finde følgende sekvens:

"\r\n        "

og erstatte med:

" " (altså bare et mellemrum).

De fleste editorer synes filen er for stor, og når der endelig er en der vil åbne filen så laver den search/replace i ram hvilket jeg ikke har nok RAM til ...

Jeg har prøvet med sed, men den vil ikke matche \r\n (den erstatter ingenting)

Jeg har prøvet med awk, men den kan jeg kun få til at matche et enkelt tegn (fx \n)

Jeg har prøvet med de editorer jeg lige kunne finde (notepad, "010 Editor", gedit, kedit, emacs, vi, fsw webcoder), men enten er filen for stor eller også vil de ikke lave multi-line replaces (altså matche \r\n).

Hvad skal jeg bruge? Hvorfor er det så svært (for mig) at finde et værktøj til en opgave der ellers lyder så simpel?
Avatar billede aggemamme Nybegynder
27. april 2006 - 07:28 #1
i øvrigt, grunden til at jeg overhovedet skal det er at jeg har en fil der ser sådan her ud:


INSERT INTO tabel1
  (gaji,gad,gadw) VALUES
  ('faf',
    'faga',
    'aqe');

INSERT INTO tabel2
  (gaji,gad,gadw) VALUES
  ('faf',
    'faga',
    'aqe');


jeg vil gerne kunne greppe efter de forespørgsler (afgrænset af semikolon) der indeholder tabel2 men ikke dem fra tabel1. Derfor er min "løsning" (hack) at få det til at stå på en linje (ved at udnytte at alle "underlinjerne" starter med en række mellemrum) så jeg kan bruge grep.
27. april 2006 - 09:43 #2
http://www.textpad.com/download/index.html ka' lige præcist det du vil...
Du kan også få dette "\r\n        " erstatet med " " (altså bare et mellemrum).

Jeg har prøvet op til 400Mb Tekstfil og med global Søg/Erstat - fint nok...
Avatar billede aggemamme Nybegynder
27. april 2006 - 09:47 #3
OK, nu har jeg dog fået tekstfilen splittet op så de fylder 1,7 GB hver, og det har jeg lige en hex-editor der kan klare. Men hvis den ikke kan alligevel prøver jeg textpad.

Tak!
Avatar billede erikjacobsen Ekspert
27. april 2006 - 10:00 #4
Det kan altid lade sig gøre med Perl.
Avatar billede aggemamme Nybegynder
27. april 2006 - 14:27 #5
Hehe, alt kan lade sig gøre i Perl. :-)

Jeg er ikke så stærk i perl, kan du evt give et eksempel?
Avatar billede aggemamme Nybegynder
27. april 2006 - 14:57 #6
Jeg er nu i gang med perl:

Dette virker:

  perl -pi -e 's/\x0a\x0d/\n/g' <filename>

x0a = \r, x0d = \n.

Men det skal jo kun være hvor der er space efter:

  perl -pi -e 's/\x0a\x0d\x20/\n/g' <filename>

x20 = space

Det øverste virker men det nederste gør ikke, sikkert fordi perl arbejder med "line context" (for each line do) ... (dette problem er jeg løbet ind i med stort set alle de værktøjer jeg har forsøgt at bruge)
Avatar billede aggemamme Nybegynder
27. april 2006 - 15:04 #7
Min endelige løsning blev at erstatte alle de "gode" linjeskift (dem der kom efter et ;) med teksten GODTLINJESKIFT, og dernæst fjerne alle linjeskift i filen. Til sidst erstattede jeg så GODTLINJESKIFT med \n ...

Total hack, men jeg håber ikke at ordet GODTLINJESKIFT indgår i dumpets tekst...

Tak for svar, læg lige rigtige svar så i kan få point
Avatar billede erikjacobsen Ekspert
27. april 2006 - 16:53 #8
Lyder som en god løsning. Jeg ville måske have gjort det på en anden måde. Men jeg samler slet ikke på point, tak.
Avatar billede aggemamme Nybegynder
20. maj 2006 - 05:18 #9
Nej, det var snarere et dårligt hack end en god løsning. :) Men det virkede.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester