首页 > 解决方案 > 如何在执行 sed 时忽略文件中的特殊字符

问题描述

我需要用 json 文件的内容替换一个字符串。所以我的代码就像

value=$(<minified.json)
sed -i -e "s/<!--MyJson-->/$value/" file.html

我需要将 json 文件的内容替换为<!--MyJson-->file.html 中的字符串。

发生问题是因为 json 中的某些数组元素/因此而失败并出现错误

sed: -e expression #1, char 438: unknown option to `s'

但我无法更改 json 中的文本。那么我怎样才能让我的 sed 命令忽略复制文本中的反斜杠。或者我怎样才能把它作为一个盲目的替代品。

请帮忙

标签: javascriptsed

解决方案


您可以使用不同的分隔符进行替换:

sed -i -e "s%<!--MyJson-->%$value%" file.html

(提供%在 json 中不使用)。

或者切换到变量是一等公民的 Perl,而不仅仅是在 shell 中扩展宏:

value=$value perl -i~ -pe 's/<!--MyJson-->/$ENV{value}/' -- file.html
  • -p逐行读取输入并在处理后打印
  • ENV 哈希包含环境变量,在同一行设置变量将其导出到以下命令

推荐阅读