sed:-e 表达式 #1,字符 35:未终止的“s”命令

sed:-e 表达式 #1,字符 35:未终止的“s”命令

我有一个文本文件,其中包含如下行:

SET @@GLOBAL.GTID_PURGED='abae51b1-e1dc-11e8-bfd0-5665b72f6318:1-12559259';

使用 sed,我想删除该行。我让它部分工作,因为我可以匹配一串字符(例如GTID_PURGED),但在分号( )之前它不会匹配字符串的其余部分;这是我的正则表达式:

(SET @@GLOBAL.GTID_PURGED=.*?\;)

这是我产生错误的完整命令:

sed -i 's/(SET @@GLOBAL.GTID_PURGED=.*?\;)/' test.sql

答案1

我想删除该行

s/pattern/replacement/sed用替换项替换模式的命令。但你不给替代品。
要删除一行,您需要sed -i '/pattern/d'.

附加提示:

  • 除非您将扩展正则表达式与 一起使用sed,否则必须转义括号。对于删除命令,括号没有用,您应该将其删除。
  • posix 正则表达式不知道非贪婪修饰符 ( ?)。您可能想使用.*;[^;]*;代替.*?\;.;不是特殊字符,不需要转义。

答案2

s/用于替换匹配项,并且在示例中最后一个之后缺少替换字符串。

如果您只想删除该行,请d在末尾使用而不是s在开头使用。

sed -i '/match/d' filename

相关内容