2011-01-08 10 views

Antwort

0
awk ' 
    BEGIN     { noprint = 1; cue = ARGV[1]; ARGV[1] = ""} 
    (!noprint)    { print } 
    (noprint && $0 == cue) { noprint = 0 } 
' house textfile 
+0

Dieses ist für mich nicht funktioniert, ich überhaupt keine Ausgabe. –

+0

Hey, was ist mit der -1? Dies funktioniert mit 'gawk' 3.1.5 unter Debian 5.0. –

+0

Yup: http://cl.ly/0m2g1R2x2X430K123P14 –

0

Sie können dies leicht mit einem Perl-Einzeiler, die Sie natürlich in ein bash-Skript integrieren können.

$ perl -ne 'print if $ok; $ok=1 if /^house$/' sample.txt 
cat 
dog 
etc 
6
sed -n '0,/^house$/d;p' input.txt 
+0

Dieser druckt die ganze Datei für mich aus. (Läuft sed auf OS X 10.6.6) –

+0

@Simon Whitaker - krank, lesen Sie die Frage erneut – ajreal

+2

GNU 'sed' unterstützt 0 als Adresse, aber andere nicht. Der Unterschied zwischen '0,/regex /' und '1,/regex /' ist, dass, wenn die Regex mit der ersten Zeile übereinstimmt, die 0-Form den Bereich beendet, aber die 1-Form wird bis zur nächsten Übereinstimmung der Regex warten Beenden Sie den Bereich. –

0

Sie können auch den Unix-Texteditor ed für diese Art von Aufgabe verwenden. Beachten Sie, dass ed die gesamte Datei in den Speicher liest und Dateien ohne vorherige Sicherung bearbeitet.

# prints result to stdout 
printf '%s\n' H ',g/^house$/1,/^house$/d' ',p' | ed -s file 
printf '%s\n' H ',g/^house$/1,//d' ',p' | ed -s file # short version 

# edits file in-place 
printf '%s\n' H ',g/^house$/1,/^house$/d' wq | ed -s file 

Für weitere Informationen über ed finden Sie unter:

"Bearbeiten von Dateien mit dem Texteditor ed von Skripten",

http://wiki.bash-hackers.org/howto/edit-ed

Verwandte Themen