Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Suchen/Ersetzen in awk

  1. #1
    wmessmer
    Gast

    Suchen/Ersetzen in awk

    Hallo Leute,
    ich möchte in einer Datei das Zeichen "~" durch ein "#" ersetzen.
    Kann mir hier jemand helfen?

    Danke vorab.

    Werner

  2. #2
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Code:
    sed -i 's/~/#/g' datei
    sollte funktionieren.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  3. #3
    wmessmer
    Gast
    Hallo jeebee,

    geht leider nicht.

    Wollte dies mit awk in einer Batch ausführen.

    Gruß
    Werner

  4. #4
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    dann mit awk:
    Code:
    { rm test.txt && awk 'gsub("~","#")' > test.txt; } < test.txt
    Variante ohne temporäre Datei. Oder:
    Code:
     awk 'gsub("~","#")' test.txt > tmp; mv tmp test.txt
    mit temporärer Datei.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  5. #5
    wmessmer
    Gast
    hat super funktioniert!
    jetzt möchte ich noch in der Datei die ersten 3 Zeilen "rausschmeissen".
    Geht dass?

  6. #6
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    [ Annahme Unix/Linux; coreutils und shell mit Pipelinig vorhanden ]

    mit dem folgenden Befehl kannst du die ersten 3 Zeilen abschneiden:
    Code:
    tail -n +4 test.txt > tmp ; mv tmp > test.txt
    Dies gibt die Datei test.txt von der 4. Zeile an aus.
    Also:
    Code:
    tail -n +4 | awk 'gsub("~","#")' test.txt > tmp; mv tmp test.txt
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  7. #7
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Zitat Zitat von wmessmer Beitrag anzeigen
    hat super funktioniert!
    jetzt möchte ich noch in der Datei die ersten 3 Zeilen "rausschmeissen".
    Geht dass?
    Wenn Du schon beim awk bist: awk ' { if (NR < 4) getline; } ... '

    awk kennt etliche vordefinierte Variablen (siehe "man awk"), NR steht für die aktuelle Zeile der Eingabedatei. getline ist sowas wie next in Perl oder continue in anderen Sprachen - Überspringen aller folgenden Befehle und Fortsetzen mit dem nächsten Schleifenwert (für awk die nächste Eingabezeile).

    Jan

  8. #8
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Hmm, danke das hab ich beim Überfliegen der man-page nicht gefunden... War mir aber ziemlich sicher dass sowas gehen muss.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •