我正在尝试替换文件中的一行,这是我当前的shell脚本:
sed -i "s%$line%$line_formatted%g" $file_source
每当我尝试将$line
替换为$line_formatted
时,我都会收到此错误:
sed: -e expression #1, char 81: unknown option to `s'
我只是想知道正确的语法是什么?
尝试下面的评论,它仍然不会替换文本。这是我使用的代码:
echo "Here is line: "$line
echo "Here is line_formatted: "$line_formatted
# sed -i "s%$line%$line_formatted%g" $topicJRXML_file_source
awk -v old="$line" -v new="$line_formatted" '
s=index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+length(old)) }
' $topicJRXML_file_source
cp "$topicJRXML_file_source" "$topicJRXML_file_destination"
echo "Here is line after awk: "$line
这是我的控制台输出:
Here is line: <property name="adhoc.display" value="Awk Test"/>
Here is line_formatted: <property name="adhoc.display" value="$R{CUSTOM.Awk_Test.LABEL}"/>
Here is line after awk: <property name="adhoc.display" value="Awk Test"/>
答案 0 :(得分:1)
请参阅http://stackoverflow.com/q/29613304/1745001,了解使用sed做你想做的事情的可怕任务,而不是试图强迫sed假装它在文字字符串操作时不支持它们,只是使用awk:
awk -v old="$line" -v new="$line_formatted" '
s=index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+length(old)) }
{ print }
' file
答案 1 :(得分:0)
鉴于文件update-adhoc-display.xslt
中保存了以下XSLT模板:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="newValue"/>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//property[@name='adhoc.display']/@value">
<xsl:attribute name="value">
<xsl:value-of select="$newValue"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
......以下命令:
xsltproc \
--stringParam newValue "Updated Value" \
update-adhoc-display.xslt in.xml >out.xml
...将转换输入文档:
<root>
<property name="adhoc.display" value="Initial Value 1"/>
<property name="other.content" value="Initial Value 2"/>
</root>
...输出文件:
<root>
<property name="adhoc.display" value="Updated Value"/>
<property name="other.content" value="Initial Value 2"/>
</root>
受https://stackoverflow.com/a/6873226/14122 @Mithfindel的强烈启发,以及 - 作为已知副本的答案 - 被标记为社区Wiki。