Sed表达式是否匹配此多行代码?

Sed表达式是否匹配此多行代码?,sed,Sed,假设以下代码段: <head> <script>....</script> <script>....</script> </head> <body> <script> some stuff a change more stuff more changes more stuff }

假设以下代码段:

  <head>
     <script>....</script>
     <script>....</script>
  </head>
  <body>
    <script>
      some stuff
      a change
      more stuff
      more changes
      more stuff
            }
          }
        }
      }
     final changes
    </script>
  </body>

我读过这个问题,但它不适合我的特殊情况,因为它匹配搜索选项之间的所有内容。我需要匹配一些内容,然后在第一个搜索操作符之前添加一些内容。

sed
grep
awk
等不用于XML/HTML处理。
使用适当的XML/HTML解析器

xmlstarlet
就是其中之一。
示例
file.html

<html>
<head>
     <script>....</script>
     <script>....</script>
  </head>
  <body>
    <script>
      var data = [0, 1, 2];
      console.log(data);
    </script>
  </body>
</html>
输出:

<html>
<head>
     <script>....</script>
     <script>....</script>
  </head>
  <body>
    <script>alert("success")</script>
  </body>
</html>

....
....
警惕(“成功”)

最终得到了以下xara的答案


总之,不要试图对sed施展魔法,而是用sed能理解的字符替换换行符(如
\r
),进行替换,然后再次用换行符替换字符。

我同意
xmlstarlet
是一种方法,但不幸的是,与
jq
一样,宇宙中只有三个人知道如何使用它们!你知道有什么好的资源可以解释如何使用它吗?这对凡人来说是可以理解的?@MarkSetchell,没问题,添加了xmlstarlet-guide-link如果我想替换特定标记之间的内容,这是一个HTML解析器,这个解决方案是正确的。但这不是我的例子,我不是解析HTML,我有兴趣在文件中替换特定的字符串(它是真的不管是HTML,C++还是只是一个随机文本文件)。检查问题中已编辑的代码段。
xmlstarlet ed -O -P -u '//body/script' -v 'alert("success")' file.htm
<html>
<head>
     <script>....</script>
     <script>....</script>
  </head>
  <body>
    <script>alert("success")</script>
  </body>
</html>