gpt4 book ai didi

regex - 为什么这个正则表达式在 grep 中有效但在 sed 中无效?

转载 作者:行者123 更新时间:2023-12-03 15:41:11 27 4
gpt4 key购买 nike

我有两个正则表达式:

  • $ grep -E '\-\- .*$' *.sql
  • $ sed -E '\-\- .*$' *.sql

  • (我正在尝试 grep 具有注释的 sql 文件中的行并删除具有注释的 sql 文件中的行)
    grep 命令使用这个正则表达式;但是,sed 返回以下错误:
    sed: -e expression #1, char 7: unterminated address regex我用 sed 做错了什么?
    (如果你不熟悉这种类型的MySql注释,sql注释需要两个连字符后面的空格)

    最佳答案

    您正在尝试使用:

    sed -E '\-\- .*$' *.sql
    这里 sed命令不正确,因为您并没有真正告诉 sed做某事。
    它应该是:
    sed -n '/-- /p' *.sql
    和等效 grep将是:
    grep -- '-- ' *.sql
    甚至更好的固定字符串搜索:
    grep -F -- '-- ' *.sql
    使用 --grep 中分隔模式和参数命令。
    没必要逃 -在正则表达式中,如果它在括号表达式(或字符类)之外,即 [...] .

    根据下面的评论,OP 的意图似乎是删除所有 *.sql 中的评论部分。以 2 个连字符开头的文件。
    你可以用这个 sed为了那个原因:
    sed -i 's/-- .*//g' *.sql

    关于regex - 为什么这个正则表达式在 grep 中有效但在 sed 中无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66391881/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com