macOS Catalina终端如何使用sed查找替换指定HTML字符串
问题根因
- 报错由
sed替换命令分隔符冲突导致:sed的s替换命令默认使用/作为分隔符,你待匹配的字符串里URL包含大量/字符,sed读到http://中的斜杠时会误判替换规则的匹配段提前结束,后续字符串被识别为待处理文件路径,最终触发找不到文件的报错。 - 此前替换
14px为18px的命令可正常运行,是因为待匹配内容不含斜杠,不会触发分隔符冲突。 - 「正则无法完美解析HTML」的顾虑不适用于当前场景:你不需要处理HTML递归嵌套、属性顺序可变的通用解析需求,仅做固定字面字符串的精确匹配替换,不存在正则解析HTML的典型缺陷。
操作步骤
执行修复后的sed命令
sed的s命令支持自定义分隔符,将默认的/替换为不会出现在匹配内容中的|即可解决冲突:
- Linux环境(默认搭载GNU sed)执行命令:
find ./html -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' {} \;
- macOS环境(默认搭载BSD sed)下
-i参数需要显式指定备份后缀,无需备份则传入空字符串,执行命令:
find ./html -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' {} \;
替换结果校验
替换完成后执行以下命令,无输出则代表所有目标字符串都已替换完成:
grep -r '<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="0 0 256 256">' ./html
内容的提问来源于stack exchange,提问作者skrely
相关产品推荐
相关产品推荐

