Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在sed命令中使用带\的变量_Bash_Shell_Sed - Fatal编程技术网

Bash 如何在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="

我有一个字符串文件,我想用sed命令替换它

文件中的字符串:

 <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文件。