我想将文本PATHTOEXPORT
替换为在命令行上传递的变量的内容,该变量将包含文件夹路径(例如,/Dev_Content/AIX/Apache
)
我遇到了这个article,讨论了如何使用sed
将XML文件中的值替换为另一个。
但是,之前没有使用sed
,我不确定如何阅读说明。
脚本如下:
# Check that exactly 3 values were passed in
if [ $# -ne 3 ]; then
echo 1>&2 “This script replaces xml element’s value with the one provided as a command parameter \n\n\tUsage: $0 <xml filename> <element name> <new value>”
exit 127
fi
echo "DEBUG: Starting... [Ok]\n"
echo "DEBUG: searching $1 for tagname <$2> and replacing its value with '$3'"
# Creating a temporary file for sed to write the changes to
temp_file="repl.temp"
# Elegance is the key -> adding an empty last line for Mr. “sed” to pick up
echo ” ” >> $1
# Extracting the value from the <$2> element
el_value=`grep “<$2>.*<.$2>” $1 | sed -e “s/^.*<$2/<$2/” | cut -f2 -d”>”| cut -f1 -d”<”`
echo "DEBUG: Found the current value for the element <$2> - '$el_value'"
# Replacing elemen’s value with $3
sed -e “s/<$2>$el_value<\/$2>/<$2>$3<\/$2>/g” $1 > $temp_file
# Writing our changes back to the original file ($1)
chmod 666 $1
mv $temp_file $1
有没有更好的方法来做我需要做的事情?我可以 in situ 而不是使用中间文件吗?
答案 0 :(得分:1)
您可以进行sed编辑。有两个选项,有sed为你创建一个临时文件(最安全)或者实际编辑它(如果你的命令没有经过测试就很危险)。
sed -i 'bak' -e 's|PATHTOEXPORT|/Dev_Content/AIX/Apache|' file.txt
或勇敢的:
sed -i '' -e 's|PATHTOEXPORT|/Dev_Content/AIX/Apache|' file.txt