shell - sed命令替换文件中的代码并保存

标签 shell unix sed

我有一个 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 `|'

知道问题出在哪里吗?更好的是,如果有人可以建议如何删除代码(包括标签),那将是理想的。

很抱歉,如果问题很明显,我对这些东西完全是个新手。

最佳答案

假设:

  • BEGINEND评论总是成对的
  • 您确定格式是固定的:<!-- (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/

相关文章:

c - task_pid_nr(current) 返回一个没有出现在 ps 输出中的 pid

linux - Cron 作业调度在 ubuntu 中不起作用

shell - 将VxWorks Shell输出重定向到套接字

PHP执行外部命令后返回空白页

bash - 替换文本文件中的日期

linux - 如何将常量添加到制表符分隔文本 linux 文件中的特定列

sockets - lua-socket : unix domain sockets?

bash - 如何将目录转换为字符串?

bash - 删除文件 A 中包含文件 B 中字符串的所有行

linux - 如何使用 linux 命令删除大文件 (>5G) 的某些行