【问题标题】:Regex : how to replace only specific strings in file正则表达式:如何仅替换文件中的特定字符串
【发布时间】:2021-03-26 00:48:49
【问题描述】:

使用 shell 脚本,我正在尝试替换字符串的特定部分。

这是文件及其内容的摘录:

\"filename\":\"screenreader\"}', '{\"registration_email\":\"toto@toto.com\",\"read_page\":\"1\"
\"unique_pagination\":\"1\",\"registration_email\":\"toto@toto.com\",\"searchbox_enable\":\"0\",\
\"filename\":\"jspeed\"}', '{\"registration_email\":\"toto@toto.com\",\"combine_files_enable\":\"1\"

我想用另一个字符串替换所有 toto@toto.com 字符串。 但是字符串 toto@toto.com 不会系统地相同...可以是 tata@tata.com 或其他。

这是我在 shell 脚本中的 SED 命令:

sed -i -e 's/\\"registration_email\\":\\".*\\"/\\"registration_email\\":\\"TATATATATA\\"/g' file.txt

此命令有效,字符串被正确替换,但每行的末尾被删除,结果如下:

\"filename\":\"screenreader\"}', '{\"registration_email\":\"TATATATATA\"
\"unique_pagination\":\"1\",\"registration_email\":\"TATATATATA\",\
\"filename\":\"jspeed\"}', '{\"registration_email\":\"TATATATATA\"

预期结果应该如下:

\"filename\":\"screenreader\"}', '{\"registration_email\":\"TATATATATA\",\"read_page\":\"1\"
\"unique_pagination\":\"1\",\"registration_email\":\"TATATATATA\",\"searchbox_enable\":\"0\",\
\"filename\":\"jspeed\"}', '{\"registration_email\":\"TATATATATA\",\"combine_files_enable\":\"1\"

那么如何在不删除每行末尾的情况下替换字符串呢?

谢谢

【问题讨论】:

    标签: regex linux shell unix


    【解决方案1】:

    使用 -r 启用正则表达式并将行分成三个部分。替换第一和第二部分的行,然后是替换电子邮件和第四部分

    sed -rn 's/(^.*)(registration_email\\":\\")(.*@.*)(\\",\\".*$)/\1\2TATATATATA\4/p' file
    

    提交到文件

    sed -ri 's/(^.*)(registration_email\\":\\")(.*@.*)(\\",\\".*$)/\1\2TATATATATA\4/' file
    

    【讨论】:

    • 好的,但字符串不是电子邮件所必需的。可以是数字、文本等。在您的示例中,仅适用于邮件?
    • 对此有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 2021-11-20
    • 2023-03-13
    • 2021-10-10
    • 2020-01-25
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多