tr和括号

问题描述 投票:0回答:1

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

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

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

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

replace parentheses tr
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();
© www.soinside.com 2019 - 2024. All rights reserved.