多行sed选项?

多行sed选项?,sed,replace,Sed,Replace,我想删除目录中所有文件中两个字符串之间(包括两个字符串)的所有文本。例如,文件如下所示: flag bla bla bal bla bla bla endflag etc.. 这就是我对sed所做的: sed -i "s:flag.*endflag::m" * 但是,“m”选项不是sed的一部分。本主题中的所有其他堆栈溢出线程都求助于使用perl、awk或sed包装器来完成此任务。没有办法告诉sed匹配换行符吗?在sed中,您可以指定一个行范围,其中范围是一个标记范围开始的模式,另一个标记

我想删除目录中所有文件中两个字符串之间(包括两个字符串)的所有文本。例如,文件如下所示:

flag
bla bla bal
bla bla bla
endflag

etc..
这就是我对sed所做的:

sed -i "s:flag.*endflag::m" *

但是,“m”选项不是sed的一部分。本主题中的所有其他堆栈溢出线程都求助于使用perl、awk或sed包装器来完成此任务。没有办法告诉sed匹配换行符吗?

在sed中,您可以指定一个行范围,其中范围是一个标记范围开始的模式,另一个标记范围结束的模式:

sed -i '/flag/,/endflag/d' *

在sed中,可以指定线的范围,其中范围是标记范围开始的图案,另一个是标记范围结束的图案:

sed -i '/flag/,/endflag/d' *

您必须先将文本复制到保留缓冲区,然后才能像任何其他字符一样匹配。通常,一次只有一行在保持缓冲区中,因此\n永远不会是分析字符串的一部分。下面的调用首先将第一行复制到保持缓冲区(1h),然后将下面的所有行追加到保持缓冲区(1!H),并在添加最后一行($)后进行替换(s/)


您必须先将文本复制到保留缓冲区,然后才能像任何其他字符一样匹配。通常,一次只有一行在保持缓冲区中,因此\n永远不会是分析字符串的一部分。下面的调用首先将第一行复制到保持缓冲区(1h),然后将下面的所有行追加到保持缓冲区(1!H),并在添加最后一行($)后进行替换(s/)


要在
sed
中为范围说明符使用备用分隔符,必须转义第一个分隔符:

sed -i '\:<form:,\:</form>:d' *.aspx *.htm *.html

sed-i'\:要在
sed
中为范围说明符使用备用分隔符,必须转义第一个分隔符:

sed -i '\:<form:,\:</form>:d' *.aspx *.htm *.html

sed-i'\:Colin的可能重复:该线程对我尝试执行的操作有一个部分解决方案:perl-ne'print if!(m^@..m^$@)'.aspx*.htm*/.htm,但它只是将其打印到stdout。如何在每个文件中使用它来替换?如果有工具可以使事情变得简单,为什么不使用它们呢。?为什么一定要坚持使用sed呢?可能是Colin的重复:对于我正在尝试做的事情,该线程有一个部分解决方案:perl-ne'print if!(m^@..m^$@)'.aspx*.htm*/.htm,但它只是将其打印到stdout。如何在每个文件中使用它来替换?如果有工具可以使事情变得简单,为什么不使用它们呢。?为什么一定要坚持sed?嗯,这看起来很有希望,但它不起作用。我正在运行的确切命令是:sed-I':Nevermind!当我使用斜杠而不是冒号时,它起作用了。谢谢嗯,这看起来很有希望,但不起作用。我正在运行的确切命令是:sed-I':Nevermind!当我使用斜杠而不是冒号时,它起作用了。谢谢