Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
替换XML文件中的*特定*术语_Xml_Bash_Sed_Replace - Fatal编程技术网

替换XML文件中的*特定*术语

替换XML文件中的*特定*术语,xml,bash,sed,replace,Xml,Bash,Sed,Replace,我想将文本PATHTOEXPORT替换为在命令行上传递的变量的内容,该变量将包含文件夹路径(例如,/Dev\u Content/AIX/Apache) 我遇到了这个问题,它讨论了如何使用sed将XML文件中的一个值替换为另一个值 但是,我以前没有使用过sed,我不确定如何阅读说明 脚本如下: # Check that exactly 3 values were passed in if [ $# -ne 3 ]; then echo 1>&2 “This script replac

我想将文本
PATHTOEXPORT
替换为在命令行上传递的变量的内容,该变量将包含文件夹路径(例如,
/Dev\u Content/AIX/Apache

我遇到了这个问题,它讨论了如何使用
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
#检查是否传入了3个值
如果[$#-ne 3];然后
echo 1>&2“此脚本将xml元素的值替换为作为命令参数提供的值\n\n\t页:$0”
127号出口
fi
echo“调试:正在启动…[确定]\n”
echo“调试:在$1中搜索标记名并将其值替换为“$3”
#为sed创建临时文件以将更改写入
temp_file=“repl.temp”
#优雅是关键->为“sed”先生添加一行空白的最后一行
echo”“>>$1
#从元素中提取值
el|U值=`grep.*“$1|sed-e”s/^.*$temp|U文件
#将更改写回原始文件($1)
chmod 666$1
mv$temp_文件$1

有没有更好的方法来完成我需要做的事情?我可以在原地完成而不是使用中间文件吗?

您可以让sed就地编辑。有两种选择,让sed为您制作一个临时文件(最安全的),或者让它就地编辑(如果您的命令未经测试,则会很危险)

或者对勇敢的人来说:

sed -i '' -e 's|PATHTOEXPORT|/Dev_Content/AIX/Apache|' file.txt

您可以让sed就地编辑。有两个选项,让sed为您制作一个临时文件(最安全),或者让它真正就地编辑(如果您的命令未经测试,则会很危险)

或者对勇敢的人来说:

sed -i '' -e 's|PATHTOEXPORT|/Dev_Content/AIX/Apache|' file.txt

是的,您需要一个中间文件。默认情况下,sed写入标准输出,因此您必须在临时文件中捕获。如果您尝试在原始文件中捕获该文件,您将覆盖该文件并丢失内容。哎呀!我忘记了-I选项,因为我从未使用过它,对不起。我认为sed在我第一次学习Unix将近20年时没有这个选项以前(如果是的话,我显然没有学会),而我大脑中的那部分内存似乎是ROM!;->正如Brian Clements在他的回答中所说,它可能会损坏文件,因此我建议使用后缀进行备份。是的,您需要一个中间文件。默认情况下,sed会写入标准输出,因此您必须在临时文件中捕获该文件。如果您试图在原始文件中捕获该文件,请使用y您将覆盖文件并丢失内容。哎呀!我忘记了-I选项,因为我从来没有使用过它,对不起。我认为sed在我20年前第一次学习Unix时没有这个选项(如果有,我显然没有学习),而我大脑中的那部分内存似乎是ROM!;->正如Brian Clements在他的回答中所说,它可能会损坏文件,因此我建议使用后缀进行备份。我还应该注意,如果出现问题,直接选项可能会损坏文件。这正是我所寻找的!谢谢:)我也不应该这样做如果出现问题,直接选项可能会损坏文件。这正是我要找的!谢谢:)