私はInsert文を抽出するSQLダンプファイルを持っています。私はawk
を使ってこれをしようとしています。awkを使用してファイルから行を抽出する
挿入ステートメントは複数の行にまたがります。彼らはINSERT
で始まり、セミコロンで終わります。
私が使用して試してみました:
awk '/INSERT*;/' dump.sql
しかし、それは動作しません。これを行う正しい方法は何ですか? (私のgoogle-fuはこれで失敗しました)
ありがとう!
私はInsert文を抽出するSQLダンプファイルを持っています。私はawk
を使ってこれをしようとしています。awkを使用してファイルから行を抽出する
挿入ステートメントは複数の行にまたがります。彼らはINSERT
で始まり、セミコロンで終わります。
私が使用して試してみました:
awk '/INSERT*;/' dump.sql
しかし、それは動作しません。これを行う正しい方法は何ですか? (私のgoogle-fuはこれで失敗しました)
ありがとう!
このような何か(または何@belisariusが示唆)で動作している
/^INSERT/, /.*;/ {print}
に動作します:
レコードセパレータを設定awk '{ if ($1 ~ /^\s*INSERT/) print $0 ";" }' RS=";" dump.sql
かなりシンプルでよく文書化されています:
http://www.gnu.org/software/gawk/manual/html_node/Multiple-Line.html
@ belisariusの解決策のようにダブルマッチの参照が見つからないようですが、私はそれがより好きです。
データにセミコロンが含まれていない場合は、 'FS =;'を設定してSQL文のレコードを分割できます。 – sarnold
regexが間違っています、 '/ INSERT。*; /'、またはより良い '/^INSERT。*; $ /'でなければなりません。私のMySQLダンプが複数の行にまたがっていないことを確認しました。 –
。*表記は意味がありますが、動作していないようです。ダンプファイルはセミコロンを間違いなく区切り文字として使用します。ダンプファイルを 'cat'すると、複数の行にまたがっています。 ( '^'と '$'を使わないほうが良いでしょう。前後にスペースがあるように思われるからです)。 – Akshay