0

各行に SQL クエリを含む巨大なファイルがあります。しかし、そのファイルにはいくつかのバグがあり、再作成には時間がかかりすぎます。セミコロンが欠落している行がいくつかあります。これらの行は常に ) で終わり、その後に改行が続くことがわかります。だから私がしたことは次のとおりです:

cat file.sql | tr ')\n' ');\n' > new_file.sql

ただし、これはすべての行にセミコロンを追加するだけです。わかりません。括弧が検出されないようです。セミコロンのない括弧で終わるすべての行を見つけて、改行の前に追加したいだけです。

どうやってやるの?sed私は改行を扱うことができないことを知っているのでtr、最良の選択だと思いました.

4

1 に答える 1

2

これには使用しないでください。文字列ではなく文字セットでtr機能します。コマンドは、セット 2 の余分な文字を無視して、すべてをに変換し、すべてを に変換します。))\n;

pax> echo 'line1()
...> line2();
...> line3()' | tr ')\n' ');\n'

line1();line2();;line3();

sedこの仕事にはより良いツールです:

sed 's/)$/);/' file.sql > new_file.sql

)$それが行うことは、任意のシーケンス (行末の閉じ括弧)を に置き換えること);です。次のトランスクリプトで実際の動作を確認できます。

pax> echo 'line1()
...> line2();
...> line3()' | sed 's/)$/);/'

line1();
line2();
line3();
于 2013-03-14T08:14:29.567 に答える