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>