我有一个巨大的文件,每行都有 SQL 查询。但是该文件有一些错误,重新创建它会花费太多时间。我有一些缺少分号的行。我看到这些行总是以 ) 结尾,然后是换行符。所以我所做的是:
cat file.sql | tr ')\n' ');\n' > new_file.sql
但这只是在所有行上添加分号。我不明白,它似乎没有检测到括号。我只是想找到所有以括号结尾但不带分号的行,并将其添加到换行符之前。
我怎样才能做到这一点?我知道sed
不能处理换行符,所以我认为tr
是最好的选择。
我有一个巨大的文件,每行都有 SQL 查询。但是该文件有一些错误,重新创建它会花费太多时间。我有一些缺少分号的行。我看到这些行总是以 ) 结尾,然后是换行符。所以我所做的是:
cat file.sql | tr ')\n' ');\n' > new_file.sql
但这只是在所有行上添加分号。我不明白,它似乎没有检测到括号。我只是想找到所有以括号结尾但不带分号的行,并将其添加到换行符之前。
我怎样才能做到这一点?我知道sed
不能处理换行符,所以我认为tr
是最好的选择。
不要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();