0

我有一个巨大的文件,每行都有 SQL 查询。但是该文件有一些错误,重新创建它会花费太多时间。我有一些缺少分号的行。我看到这些行总是以 ) 结尾,然后是换行符。所以我所做的是:

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

但这只是在所有行上添加分号。我不明白,它似乎没有检测到括号。我只是想找到所有以括号结尾但不带分号的行,并将其添加到换行符之前。

我怎样才能做到这一点?我知道sed不能处理换行符,所以我认为tr是最好的选择。

4

1 回答 1

2

不要tr为此使用,它适用于字符集而不是字符串 - 您拥有的命令将全部)转换为)并全部\n转换为;,忽略集合 2 中的多余字符:

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 回答