【问题标题】:Regexp delete using sed works on regex101 but not with sed [duplicate]使用 sed 的正则表达式删除适用于 regex101,但不适用于 sed [重复]
【发布时间】:2020-10-22 18:20:34
【问题描述】:

我需要从与 REGEX 模式匹配的文本文件中删除字符串,使用 regex101 我的模式匹配工作正常,但是当我使用 sed 执行时,没有任何内容被删除,并且由于某种原因正则表达式不起作用:

https://regex101.com/r/oLNrDB/1/

我需要删除所有出现的所有文本,包括以下 2 个字符串之间的换行符:

DELIMITER ;;
some text with newlines
DELIMITER ;

我使用的 sed 命令是:

sed '/DELIMITER ;;[\S\s]*?DELIMITER ;/d' myfile.sql;

但输出与输入文件相同,我做错了什么?

【问题讨论】:

标签: regex sed


【解决方案1】:

这里的问题是sed 逐行读取文件并将模式分别应用于每一行。在您的情况下,这意味着一个模式不能同时匹配起始和结束分隔符,因为没有一行包含它们。

sed 这样做的方法是使用带有删除命令的范围,/start pattern/,/end pattern/d,这意味着删除开始模式和结束模式之间的所有行(包括)。例如

$ cat foo.txt
some text before
DELIMITER ;;
some text with newlines
DELIMITER ;
some text after
$ sed '/DELIMITER ;;/,/DELIMITER ;/d' foo.txt
some text before
some text after

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多