如何使用 shell 脚本在文件的特定行写入 xml 标记
How to write a xml tag in file at a particular line using shell script
我想在文件中的某行写一个 xml 标签 number.I 将要求用户填写一些我将用来生成 xml 标签的信息.
回应后,我得到了想要的。但是当我将它写入文件时,我几乎没有遇到异常。
脚本文件:test.sh
cd /opt/shibboleth-ds/conf
chmod 777 wayfconfig.xml
echo "Please Enter MetadataProvider displayName : "
read -r -p "" mdp_displayname
echo "Please Enter MetadataProvider identifier : "
read -r -p "" mdp_identifier
echo "Please Enter Federation Metadata URL : "
read -r -p "" fmd_url
configure_metadata_xml='<MetadataProvider
displayName="'$mdp_displayname'"
identifier="'$mdp_identifier'"
backingFile="'$ds_home'/metadata/fed-metadata-backup.xml"
url="'$fmd_url'"/>'
echo $configure_metadata_xml
#sed -i '70i\test string' wayfconfig.xml
sed -i '70i\'$configure_metadata_xml'' wayfconfig.xml
我正在尝试在第 70 行的 wayfconfig.xml 中写入 xml 标记。
输出:
./test.sh
Please Enter MetadataProvider displayName :
MyDisplayName
Please Enter MetadataProvider identifier :
MyIdentifier
Please Enter Federation Metadata URL :
http://plamakerandroid.com/file.xml
<MetadataProvider displayName="MyDisplayName" identifier="MyIdentifier" backingFile="/metadata/fed-metadata-backup.xml" url="http://plamakerandroid.com/file.xml"/>
sed: can't read displayName="MyDisplayName": No such file or directory
sed: can't read identifier="MyIdentifier": No such file or directory
sed: can't read backingFile="/metadata/fed-metadata-backup.xml": No such file or directory
sed: can't read url="http://plamakerandroid.com/file.xml"/>: No such file or directory
我在这里错过了什么
您的变量将包含 spaces,因此您需要引用它。试试这个:
sed -i '70i'"$configure_metadata_xml" wayfconfig.xml
让我告诉你它是如何工作的:
测试变量中没有 space 不需要引用:
test="abc"; sed -re '1i'$test <<< $'a\nb\nc'
abc
a
b
c
在测试变量中使用 space 但没有引用:
test="a bc"; sed -re '1i'$test <<< $'a\nb\nc'
sed: can't read bc: No such file or directory
在测试变量中使用 space 并引用:
test="a bc"; sed -re '1i'"$test" <<< $'a\nb\nc'
a bc
a
b
c
使用awk
命令,
awk 'NR==7{print "This is the new line"}7' filename
使用sed
命令,
sed -i .bak '7i\
This is the new line\
' filename
这些命令带有插入 这是新行,行号为 7。
我想在文件中的某行写一个 xml 标签 number.I 将要求用户填写一些我将用来生成 xml 标签的信息. 回应后,我得到了想要的。但是当我将它写入文件时,我几乎没有遇到异常。
脚本文件:test.sh
cd /opt/shibboleth-ds/conf
chmod 777 wayfconfig.xml
echo "Please Enter MetadataProvider displayName : "
read -r -p "" mdp_displayname
echo "Please Enter MetadataProvider identifier : "
read -r -p "" mdp_identifier
echo "Please Enter Federation Metadata URL : "
read -r -p "" fmd_url
configure_metadata_xml='<MetadataProvider
displayName="'$mdp_displayname'"
identifier="'$mdp_identifier'"
backingFile="'$ds_home'/metadata/fed-metadata-backup.xml"
url="'$fmd_url'"/>'
echo $configure_metadata_xml
#sed -i '70i\test string' wayfconfig.xml
sed -i '70i\'$configure_metadata_xml'' wayfconfig.xml
我正在尝试在第 70 行的 wayfconfig.xml 中写入 xml 标记。
输出:
./test.sh
Please Enter MetadataProvider displayName :
MyDisplayName
Please Enter MetadataProvider identifier :
MyIdentifier
Please Enter Federation Metadata URL :
http://plamakerandroid.com/file.xml
<MetadataProvider displayName="MyDisplayName" identifier="MyIdentifier" backingFile="/metadata/fed-metadata-backup.xml" url="http://plamakerandroid.com/file.xml"/>
sed: can't read displayName="MyDisplayName": No such file or directory
sed: can't read identifier="MyIdentifier": No such file or directory
sed: can't read backingFile="/metadata/fed-metadata-backup.xml": No such file or directory
sed: can't read url="http://plamakerandroid.com/file.xml"/>: No such file or directory
我在这里错过了什么
您的变量将包含 spaces,因此您需要引用它。试试这个:
sed -i '70i'"$configure_metadata_xml" wayfconfig.xml
让我告诉你它是如何工作的:
测试变量中没有 space 不需要引用:
test="abc"; sed -re '1i'$test <<< $'a\nb\nc'
abc
a
b
c
在测试变量中使用 space 但没有引用:
test="a bc"; sed -re '1i'$test <<< $'a\nb\nc'
sed: can't read bc: No such file or directory
在测试变量中使用 space 并引用:
test="a bc"; sed -re '1i'"$test" <<< $'a\nb\nc'
a bc
a
b
c
使用awk
命令,
awk 'NR==7{print "This is the new line"}7' filename
使用sed
命令,
sed -i .bak '7i\
This is the new line\
' filename
这些命令带有插入 这是新行,行号为 7。