PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suchen/Ersetzen in awk



wmessmer
08-01-2008, 17:43
Hallo Leute,
ich möchte in einer Datei das Zeichen "~" durch ein "#" ersetzen.
Kann mir hier jemand helfen?

Danke vorab.

Werner

jeebee
08-01-2008, 18:26
sed -i 's/~/#/g' datei sollte funktionieren.

wmessmer
09-01-2008, 08:29
Hallo jeebee,

geht leider nicht.

Wollte dies mit awk in einer Batch ausführen.

Gruß
Werner

jeebee
09-01-2008, 11:53
dann mit awk:
{ rm test.txt && awk 'gsub("~","#")' > test.txt; } < test.txt Variante ohne temporäre Datei. Oder:
awk 'gsub("~","#")' test.txt > tmp; mv tmp test.txt mit temporärer Datei.

wmessmer
09-01-2008, 17:06
hat super funktioniert!
jetzt möchte ich noch in der Datei die ersten 3 Zeilen "rausschmeissen".
Geht dass?

jeebee
09-01-2008, 20:25
[ Annahme Unix/Linux; coreutils und shell mit Pipelinig vorhanden ]

mit dem folgenden Befehl kannst du die ersten 3 Zeilen abschneiden:
tail -n +4 test.txt > tmp ; mv tmp > test.txt Dies gibt die Datei test.txt von der 4. Zeile an aus.
Also:
tail -n +4 | awk 'gsub("~","#")' test.txt > tmp; mv tmp test.txt

jan61
10-01-2008, 23:35
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

jeebee
11-01-2008, 13:36
Hmm, danke das hab ich beim Überfliegen der man-page nicht gefunden... War mir aber ziemlich sicher dass sowas gehen muss.