我有两个正则表达式:
$ 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/