Shell 创建空文件的多个sed操作

Shell 创建空文件的多个sed操作,shell,sed,ksh,Shell,Sed,Ksh,当shell脚本中只有一行使用sed命令在文件上运行时,重定向的文件包含更新的数据,如下所示 cat ${PROP_PATH}/${PROP_FILE} | sed "s!${ISTR_KEY}=.*!${ISTR_KEY}=${SIM_ISTR_KEY_VAL}!" > ${UPDATEDPROPS_DIR}/${PROP_FILE} 然而,当它作为shell脚本的一部分执行时,在此之后,另一个sed命令更新了与下面脚本中相同的文件,最后我得到的是一个空文件,为什么。。。。。请给我一些

当shell脚本中只有一行使用sed命令在文件上运行时,重定向的文件包含更新的数据,如下所示

cat ${PROP_PATH}/${PROP_FILE} | sed "s!${ISTR_KEY}=.*!${ISTR_KEY}=${SIM_ISTR_KEY_VAL}!" > ${UPDATEDPROPS_DIR}/${PROP_FILE}
然而,当它作为shell脚本的一部分执行时,在此之后,另一个sed命令更新了与下面脚本中相同的文件,最后我得到的是一个空文件,为什么。。。。。请给我一些想法

(检查下面的“switchAll2Sim()”函数)


您的问题是cat正在读取sed正在写入的同一个文件

cat foo | sed "s/x/y/" > foo
将不工作,因为
cat
sed
同时运行,而不是一个接一个地运行。 要解决此问题,请尝试将-i选项设置为
sed

sed -i "s/x/y/" foo

谢谢,使用“-i”表示[sed:unlikeoption--i]

然后您必须使用tmp文件

cp foo foo.tmp 
sed "s/x/y/" foo.tmp > foo
/bin/rm foo.tmp

可能效率更高


我希望这能有所帮助。

谢谢,使用“-I”表示[sed:invalize option--I]请注意,当使用
-I
时,您不应该同时使用
将输出写入文件foo
,因为它会清除它。那是我犯的一个错误。非常感谢,我现在让它工作了,再加上你的建议,猫必须被移除。。。我使用了你的第二个选项,但没有使用“-i”
cp foo foo.tmp 
sed "s/x/y/" foo.tmp > foo
/bin/rm foo.tmp
sed "s/x/y/" foo > foo.tmp
/bin/mv -f foo.tmp foo