我有一个文本文件,其中包含如下行:
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