繁体   English   中英

如何在 macOS Catalina 的终端中使用 sed 查找和替换 html 字符串?

[英]How do I find and replace a string of html using sed in terminal on macOs Catalina?

我正在尝试更新此 html:

<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="0 0 256 256">

使用这个 html:

<svg xmlns="http://www.w3.org/2000/svg" width="30" viewBox="0 0 256 256">

在这样的文件结构中大约有 25 个 html 文件 /html/custom-folder-name-one.html /html/custom-folder-name-two.html /html/custom-folder-name-three.html。

我想将 html 的特定 SVG 字符串中的 width="20" 更改为 width="30" 但不能简单地隔离到 width 属性,因为 html 中的其他实例使用相同的 width 属性值。

此命令在我的环境中完美地适用于小的和基本的 html 更改。 寻找 。 -name "*.html" -exec sed -i 's/14px/18px/g' {} ;

但是当它们变得像这样更复杂时:

find . -name "*.html" -exec sed -i 's/<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="0 0 256 256">/<svg xmlns="http://www.w3.org/2000/svg" width="30" viewBox="0 0 256 256">/g' {} \;

我从终端收到以下错误:

sed: 无法打开文件 ww.w3.org/2000/svg" width="20" viewBox="0 0 256 256">//: 没有这样的文件或目录

我尝试将我想要查找/替换的 html 字符串转换为正则表达式,如下所示:^$

但是后来我读到正则表达式由于其递归结构而无法解析 html,并且在阅读了这篇文章RegEx match open tags except XHTML self-contained tags之后,我也冒昧地刮了眉毛。

任何帮助将不胜感激。


您可以尝试更改sed中的分隔符

find . -name "*.html" -exec sed -Ei '' 's#(<svg xmlns="http://www.w3.org/2000/svg" width=")[^"]*#\130#' {} \;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM