Mit Awk bestimmten Bereich auswählen und nicht ausgeben

S

shells

Hallo zusammen,

ich habe ein kleines Problem mit awk. Ich habe eine Text Datei
1 Zeile 1
2 /* Text
3 Text
4 */
5 Zeile 5
(Die Zeilennummering ist nur zum Verständnis da)
und aus der möchte ich die Kommentare (Die Zeilen) die mit /* beginnen
und mit */ enden rausschneiden und nicht anzeigen (Alles zwischen 2-3).
Es soll also nur Zeile 1 und 5 angezeigt werden.

Ich habe es genau anders rum hinbekommen.
awk '$1 == "/*", $1 == "*/"' test.txt
gibt alles dazwischen aus (Die Zeilen 2-4).
Ich habe versucht mit ! das um zudrehen aber es tut leider nicht.
Bei http://www.pement.org/awk/awk1line.txt und
http://www.gnu.org/software/gawk/manual/html_node/Ranges.html
habe ich auch nichts passendes gefunden.

Kann mir vielleicht da jemand Bitte weiter helfen?

Zu Not würde auch sed gehen. Perl ist auf der Maschine nicht installiert und
wird auch nicht installiert werden.

Grüße
Sabine
 
Hi Sabine,

dein Kommando lässt sich ganz einfach folgendermassen "umdrehen":
Code:
awk '$1 == "/*", $1 == "*/" { next } { print }'

Wenn alle Kommentare sich über mehrere Zeilen erstrecken, das einleitende "/*" ebenso wie der Abschluss "*/" jeweils am Anfang einer Zeile stehen, lassen sich diese Kommentare mit
Code:
sed '/^\/\*/,/^\*\//d'
entfernen; sonst wird das Ganze komplizierter, und du brauchst so etwas wie z.B. die von Rvg erwähnten Beispiele.

Gruss
 

Ähnliche Themen

awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung

sed: multiline: newline ersetzen mit Bedinung

bestimmte Zeile(n) in Datei löschen

Open-Xchange auf OpenSuse mit Commu. Installer - Compiler Fehler

Superkaramba @ Debian FEHLER????

Zurück
Oben