我有一个 HTML 文件,其中包含一些我想在编译我的应用程序时删除的内容。
需要删除的内容以"<!-- BEGIN -->"
为前缀并以 "<!-- END -->"
为后缀.因此,这两个标签(包括标签)之间的所有内容都需要删除。
<!-- BEGIN -->
Remove me
<!-- END -->
我相信以下命令将简单地注释掉所有代码:
# remove content between comments
cat src/html/project.html \
| sed -e 's/<!-- BEGIN -->/<!-- BEGIN /' \
| sed -e 's/<!-- END -->/ END -->/' \
> dist/html/project.html
结果是:
<!-- BEGIN
Remove me
END -->
注释掉代码并不是我想要的,但我想它可以。但是,即使在这种情况下,它也会产生语法错误:
./shell: line 3: syntax error near unexpected token `|'
知道问题出在哪里吗?更好的是,如果有人可以建议如何删除代码(包括标签),那将是理想的。
很抱歉,如果问题很明显,我对这些东西完全是个新手。
最佳答案
假设:
BEGIN
和END
评论总是成对的- 您确定格式是固定的:
<!-- (onespace) BEGIN/END (onespace) -->
- 和
BEGIN, END
评论独占一行:
这将完成工作:
sed '/<!-- BEGIN -->/,/<!-- END -->/d' file
如果我们举个例子:
kent$ cat file
<!-- BEGIN -->
Remove me
<!-- END -->
we
<!-- BEGIN -->
22Remove me
<!-- END -->
need
<!-- BEGIN -->
33Remove me
33Remove me
<!-- END -->
this
<!-- BEGIN -->
44Remove me
<!-- END -->
kent$ sed '/<!-- BEGIN -->/,/<!-- END -->/d' file
we
need
this
如果你想保存回你的文件,你可以使用-i
sed 的选项。
你也不需要 cat
将文件内容传递给 sed
关于shell - sed命令替换文件中的代码并保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15751651/