2016-07-20 1 views
0

Ich benutze sed, um einige SQL-Skript zu bearbeiten. Ich möchte alle Zeilen vom ersten "CREATE" -Muster bis zum ersten "ALTER" -Muster kopieren. Das Problem, das ich habe, ist, dass sed alle Zeilen zwischen jedem Satz von CREATE und ALTER anstelle nur des ersten Vorkommens (mehr als einmal) kopiert.Sed kopieren Muster zwischen Bereich nur einmal

sed -n -e '/CREATE/,/ALTER/w createTables.sql' $filename 
+0

Siehe http://stackoverflow.com/questions/38467115/how-to-count-the-contents-of -eine-Spalte-für-zwei-andere-mit-awk für ein Beispiel für eine gut dokumentierte Q. Mit Beispieldaten, die vom Leser kopiert werden können (zusammen mit erforderlichen VS aktuelle Ausgabe), wird es viel einfacher helfen. Viel Glück. – shellter

Antwort

2

Mit sed

sed -n '/CREATE/,/ALTER/{p;/ALTER/q}' file > createTables.sql 

oder alternativ (die Newline beachten)

sed -n '/CREATE/,/ALTER/{w createTables.sql 
/ALTER/q}' file 
3

Perl zur Rettung:

perl -ne 'print if /CREATE/ .. /ALTER/ && close ARGV' -- "$filename" > createTables.sql 

Es schließt den Eingang, wenn die ALTEN abgestimmt ist, das heißt, es nicht weiter liest.

+0

danke. Ich kenne noch kein Perl, aber es scheint, als wäre es an der Zeit, eine Skriptsprache zu erlernen. – Stelios