我需要比较输入文件的第二行是否包含字符串premium-world-check.xsd
。如果它存在,我不需要做任何事情。
如果它不存在,我需要添加到另一个文件。
我有以下输入文件,
<?xml version="1.0" encoding="UTF-8"?>
<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">
<record category="INDIVIDUAL">
<tag1>
<tag2>
....
</tag2>
</tag1>
以下是我的代码,
xsdFlag=`sed -n '2p' ${myInputFile}`
if [ $xsdFlag == *"premium-world-check.xsd"* ]
then
echo "Prepending not required"
else
echo "<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">" | cat - ${myInputFile} > wcTemp.xml && mv wcTemp.xml ${myInputFile}
echo "<?xml version="1.0" encoding="UTF-8"?>" | cat - ${myInputFile} > wcTemp.xml && mv wcTemp.xml ${myInputFile}
echo "PREPENDING:"
fi
我在if
条件下遇到了未知的运算符。
答案 0 :(得分:3)
像这样试试;我做了几个修复。
xsdFlag=`sed -n '2p' "$myInputFile"`
if [[ "$xsdFlag" == *"premium-world-check.xsd"* ]]; then
echo "Prepending not required"
else
echo '<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">' | cat - "$myInputFile" > wcTemp.xml && mv wcTemp.xml "$myInputFile"
echo '<?xml version="1.0" encoding="UTF-8"?>' | cat - "$myInputFile" > wcTemp.xml && mv wcTemp.xml "$myInputFile"
echo "PREPENDING:"
fi
一个问题是使用标准POSIX [ ... ]
而不是Bash [[ ... ]]
,您需要使用通配符。
另一个问题是你没有在XML字符串中转义引号。我将外部引号从双引号更改为单引号来修复此问题。
您也没有引用您的文件名,这是防止错误包含空格所必需的。