【问题标题】:Delete text between 2 patterns using sed [duplicate]使用 sed [重复] 删除 2 个模式之间的文本
【发布时间】:2022-12-10 12:35:11
【问题描述】:

我正在尝试删除两种模式之间的一些 JavaScript。模式是:

/* React App Start */

/* React App End */

我可以使用以下命令成功删除 JavaScript:

sed -i -e '/\/\* React App Start \*\//,/\/\* React App End \*\//d' views/layouts/index.html

但是,这也删除了我不想要的模式。因此,我尝试了以下方法,但它只删除了一些 JavaScript:

sed -i -e '/\/\* React App Start \*\//,/\/\* React App End \*\//{//!d;}' views/layouts/index.hml

有人可以帮忙吗?我在 Mac 上。

【问题讨论】:

标签: bash macos shell sed command


【解决方案1】:

使用来自 this answersed 命令作为模板:

sed -n -e '/pattern1/{' -e 'p' -e ':a' -e 'N' -e '/pattern2/!ba' -e 's/.*
//' -e '}' -e 'p' inputfile

然后将 /.../ 替换为 |...| 两次,以避免转义所有 / 并使用 转义所有四个 *

sed -n '|/* React App Start */|{p; :a; N; |/* React App End */|!ba; s/.*
//}; p' inputfile

输出:

/* React App Start */
/* React App End */

【讨论】:

  • 感谢您发布此信息。我得到sed: 1: "|/* React App Start ...": unexpected EOF (pending }'s)