Bash 如何在sed命令中使用带\的变量
我有一个字符串文件,我想用sed命令替换它 文件中的字符串:Bash 如何在sed命令中使用带\的变量,bash,shell,sed,Bash,Shell,Sed,我有一个字符串文件,我想用sed命令替换它 文件中的字符串: <ItemGroup> <None Include="xyz.config" /> <BundleResource Include="Settings.txt" /> <BundleResource Include="Resources\Base.lproj\Localizable.strings" /> <BundleResource Include="
<ItemGroup>
<None Include="xyz.config" />
<BundleResource Include="Settings.txt" />
<BundleResource Include="Resources\Base.lproj\Localizable.strings" /> <BundleResource Include="Resources\Base.lproj\InfoPlist.strings" />
</ItemGroup>
以下是我的命令:
CONTENT="<BundleResource Include="Resources\Base.lproj\Localizable.strings" /><BundleResource Include="Resources\Base.lproj\InfoPlist.strings" /><BundleResource Include="Resources\es.lproj\Localizable.strings" /><BundleResource Include="Resources\es.lproj\Infoplist.strings" />"
sed -i "s|\.*<BundleResource Include=\"Resources\\Base.lproj\\.*|${CONTENT}|g"
CONTENT=“”
sed-i“s | \.*这是bash
和sed
反斜杠引用的问题。如果您尝试
sed -i "s|\.*<BundleResource Include=\"Resources\\\\Base.lproj\\\\.*|${CONTENT}|g"
也就是说,正如一位评论者所指出的,您最好使用适当的XML工具,而不是sed
这是bash
和sed
反斜杠引用的问题。如果您尝试
sed -i "s|\.*<BundleResource Include=\"Resources\\\\Base.lproj\\\\.*|${CONTENT}|g"
也就是说,正如一位评论者所指出的,您最好使用适当的XML工具,而不是chepner提到的sed
,您可能应该使用XML工具来编辑此内容,而不是sed,但是,如果您想使用sed,您可能需要这样的内容:
sed "s|<BundleResource Include=\"Resources\\\\Base.lproj\\\\[^>]*>|${CONTENT}|g" < tmp.txt
sed“s |正如切普纳所提到的,您可能应该使用xml工具来编辑此内容,而不是使用sed,但是,如果您想使用sed,您可能需要以下内容:
sed "s|<BundleResource Include=\"Resources\\\\Base.lproj\\\\[^>]*>|${CONTENT}|g" < tmp.txt
sed“s |不要使用sed
;使用设计用于处理XML的命令,如xmllint
或xmlstarlet
。反对票是什么?--这个问题提得很好,并包括了一个例子。它遵循了@Jon在下面解释了使用设计用于处理XML的命令的原因的“如何询问”。如果发生以下情况,使用sed
确实很痛苦XML@chepner我不使用xml的原因是因为该文件不是xml文件,而是csproj文件。A是xml文件。不要使用sed
;使用设计用于处理XML的命令,如xmllint
或xmlstarlet
。反对票是什么?--这个问题提得很好,并包括了一个例子。它遵循了@Jon在下面解释了使用设计用于处理XML的命令的原因的“如何询问”。如果发生以下情况,使用sed
确实很痛苦XML@chepner我不使用xml的原因是因为该文件不是xml文件,而是csproj文件。A是xml文件。