INSERT
非常に長い行を含む大規模なSQLダンプがいくつかあります。そのうちの1つには、次の形式の長いステートメントにデータベースのバージョンとサブバージョンが含まれています。
INSERT INTO `table` VALUES (...'version','v1.23'...'subversion','45'...
ファイルを解析し、バージョンとサブバージョンを次のように組み合わせた出力を取得したいと思いますv1.23-45
。 1つのファイルが指定されている場合は個別に、ファイル名の前に複数行、複数のファイルが指定されている場合はファイルごとに1行、
file1: v1.23-45
file2: v6.78-91
sedを使用して以下を試しましたが、(1)バージョンが常にSubversionの前に来ると仮定し(必ずしも無理ではありませんがエレガントではありません)、(2)ファイル名を印刷しません。
sed -ns "s/.*'version','\([^']*\)'.*'subversion','\([^']*\)'.*/\1-\2/p" file ...
pr -ts -2
また、grepを使用して次のことを試しましたが、各ファイルの結果を2行に印刷します(単一のファイルの場合にのみ出力をbtにパイピングしてそれらを結合することができました)。
grep -oP "'(sub)?version','\K[^']*" file ...
私はawkを試していません...
どんなアイデアがありますか?