我正在尝试用配置文件中的其他文本替换某些文本。我使用该sed
命令创建了一个脚本,但出现了错误。
原文:
<property name="encryptData">false</property>
新队:
<property name="encryptData">true</property>
命令:
sed -i -e 's/<property name="encryptData">false</property>/<property name="encryptData">true</property>/g' /Users/User/Desktop/mirth.cfg
错误:
sed: 1: "s/<property name="encry ...": bad flag in substitute command: '<'
答案1
该命令几乎完美。您的问题是需要在斜杠前面加上</property>
反斜杠,\
就像这样。
sed -i -e 's/<property name="encryptData">false<\/property>/<property name="encryptData">true<\/property>/g' /Users/User/Desktop/mirth.cfg
我观察到我对这两次事件都做了同样的事。
这样 sed 就会知道这个斜线是流的一部分而不是命令“s”的一部分。
希望这能解决您的问题。
答案2
由于您要查找的模式包含/
,请更改替换命令语法的分隔符sed
。例如,您可以使用_
,也可以使用模式分组,以便在替换中使用反向引用:
sed -r 's_(<property name="encryptData">)false(</property>)_\1true\2_' /Users/User/Desktop/mirth.cfg
另外,在使用该选项时进行备份总是一个好主意-i
:
sed -ri.bak 's_(<property name="encryptData">)false(</property>)_\1true\2_' /Users/User/Desktop/mirth.cfg
现在原始文件将保留为/Users/User/Desktop/mirth.cfg.bak
,而修改后的文件将是/Users/User/Desktop/mirth.cfg
。