unix 使用sed删除文本块

smdncfj3  于 2022-11-04  发布在  Unix
关注(0)|答案(3)|浏览(169)

我有一个文本块,看起来像这样:

<!-- BOF CLEAN -->
... a bunch of stuff 
    <!-- EOF CLEAN -->

我想删除整个块。sed命令是什么?

ux6nzvsh

ux6nzvsh1#

$ cat text 
abc
    <!-- BOF CLEAN -->
... a bunch of stuff
    <!-- EOF CLEAN -->
def
$ sed '/<!-- BOF CLEAN -->/,/<!-- EOF CLEAN -->/d' text 
abc
def

我不能比Sed One-Liners Explained, Part III: Selective Deletion of Certain Lines and Special Applications更好地解释它。

mspsb9vt

mspsb9vt2#

要删除从<!-- BOF CLEAN -->开始(包括<!-- BOF CLEAN -->)到<!-- EOF CLEAN -->结束(包括<!-- EOF CLEAN -->)的所有文本,请使用以下sed命令:

sed -i '/<!-- BOF CLEAN -->/,/<!-- EOF CLEAN -->/d' file_name;

参考:Delete text or paragraph between two sections using sed

deyfvvtc

deyfvvtc3#

这些天我使用/s修饰符来做这个。我注意到没有人提到这一点。我使用的标记与是免费的空格太像

{bof-nf}
... a bunch of stuff 
    {eof-nf}

因此,例如,要删除此块,请使用
$newcontent = preg_replace("/\{bof-nf\}(.*)\{eof-nf\}\\n/s", "", $newcontent);
要保留块但删除标记,请使用

$newcontent = preg_replace("/\{bof-nf\}.*\\n/", "", $newcontent);
$newcontent = preg_replace("/\{eof-nf\}.*\\n/", "", $newcontent);

相关问题