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

标签 regex sed grep

我有两个正则表达式:

  • $ 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/

    相关文章:

    javascript - js字符串替换不起作用

    java - 使用正则表达式在错误消息中拆分文件和行

    java - 在Java中应用sed替换表达式

    linux - Grep - 如何将文件名连接到文件内容的每个返回行?

    bash - 如何grep粗体文本

    linux - 是否可以在同一个 grep 命令中使用 "AND "和 "NOT"条件

    javascript - 如何在 JavaScript 中提取部分 location.href?

    python - 正则表达式中的重复模式

    linux - 从行列表中打印行号之间的行,并使用 GNU Parallel 将每个实例保存在单独的文件中

    regex - 使用 sed 将单词 "ora.(anything)"后的空格替换为新行和单词 "ora.(anything)"