【问题标题】:tr and parenthesestr 和括号
【发布时间】:2013-03-14 08:11:46
【问题描述】:

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

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

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

我该怎么做?我知道sed 不能处理换行符,所以我认为tr 是最好的选择。

【问题讨论】:

    标签: replace parentheses tr


    【解决方案1】:

    不要为此使用tr,它适用于字符集而不是字符串 - 您拥有的命令会将所有) 转换为) 并将所有\n 转换为;,忽略set 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();
    

    【讨论】:

    • 嗯,很有趣。你能告诉我美元符号对 sed 意味着什么吗?它的工作,谢谢。
    • sed 中,$ 符号是行尾标记,否则它将替换每行上的第一个 ) 而不仅仅是末尾的那些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2017-11-23
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多