shell 使用sed删除2个模式之间的文本

kxe2p93d  于 2022-12-13  发布在  Shell
关注(0)|答案(3)|浏览(165)

我正在尝试删除两个模式之间的一些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。

yqkkidmi

yqkkidmi1#

使用ed可能比使用sed更幸运(假设Mac自带它);因为它从一开始就是为编辑文件而设计的,而不是像sed这样的文本流,所以它允许你做一些事情,比如从一个地址向后搜索,这在这里很方便:

printf "%s\n" '/React App Start/+1,/React App End/-1d' w | ed -s views/layouts/index.html

d删除与第一个模式匹配的行之后一行到与第二个模式匹配的行之前一行范围内的文件,然后将修改后的文件写回磁盘。

uujelgoq

uujelgoq2#

为了让这个工作,我必须在最后一个模式之前输入一个新行。

roqulrg3

roqulrg33#

命令分组...

sed -iE '/\/\* React App Start \*\//,/\/\* React App End \*\//{ 
  /[/][*] React App [StarEnd]+ [*][/]/n;
  d;
}' views/layouts/index.html

相关问题