我在linux中有以下文件
<?xml version="1.0"?>
<pinboard>
<backdrop style=""></backdrop>
<icon x="" y="" label="" args=""></icon>
<icon x="" y="" label="" args=""></icon>
</pinboard>
我想添加更多像
这样的行 <icon x="" y="" label="" args=""></icon>
之间的
<pinboard>
</pinboard>
最好在最后一次之前
我只想使用linux shell
答案 0 :(得分:0)
如果我理解你的问题......
使用nano还是vi? vi应该默认使用您的操作系统... nano可以使用你的包管理器轻松安装...我更喜欢nano cuz它更容易使用(与vi中的神秘外观命令相比,但是在某些系统上你需要安装nano二进制文件)
对不起,我不得不在这里发帖,因为我无法添加评论...
答案 1 :(得分:0)
好的,您可以使用流编辑器SED。您可以在</pinboard>
之前插入一行,也可以在<pinboard>
之后添加一行。两种方法都使用相同的语法:
追加:
sed '/<pinboard>/a <icon x="" y="" label="" args=""></icon>' /path/to/file.xml
要插入:
sed '/<\/pinboard>/i <icon x="" y="" label="" args=""></icon>' /path/to/file.xml
这些输出更改为标准输出。如果您想要内联更改(在文件本身中),请添加-i
开关:
sed -i '/<pinboard>/a <icon x="" y="" label="" args=""></icon>' /path/to/file.xml
如果您愿意,可以将此作为bash中的函数用于填充变量:
append()
{
local file_name="$1"
local x="$2"
local y="$3"
local label="$4"
local args="$5"
sed -i '/<pinboard>/a <icon x="$x" y="$y" label="$label" args="$args"></icon>' $file_name
}
append /some/file.xml 5 20 "Good Label" "--some-arg"
答案 2 :(得分:0)
格式良好的XML文件。 awk也可以用来做这件事。类似于以下内容。
cat /some/file.xml | \
awk \
'{ if ( $0 ~ <\/pinboard> ) {
print "<icon x="" y="" label="" args=""></icon>"
print $0
} else {
print $0
}
}
' > newfile.xml
答案 3 :(得分:0)
简短的脚本提供了直接的解决方案:
#!/bin/bash
[ -n "$1" ] || {
printf "\n Error, insufficient input. usage: %s xml_filename [endtag] [line2add]\n\n" "${0//*\/}"
exit 1
}
tag="${2:-</pinboard>}"
l2add="${3:-<icon x=\"\" y=\"\" label=\"\" args=\"\"></icon>}"
while read -r line || [ -n "$line" ]; do # read each line in XML file
if [ "$line" = "$tag" ]; then # if line = tag, begin saving lines
printf "%s\n" "$l2add" # print line to add (l2add)
fi
printf "%s\n" "$line" # print every line
done <"$1"
exit 0
<强>用法:强>
parsexml.sh xml_filename [endtag] [line2add]
endtag (default): </pinboard>
l2add (default): <icon x="" y="" label="" args=""></icon>
<强>输出:强>
$ ./parsexml.sh dat/xml.dat
<?xml version="1.0"?>
<pinboard>
<backdrop style=""></backdrop>
<icon x="" y="" label="" args=""></icon>
<icon x="" y="" label="" args=""></icon>
<icon x="" y="" label="" args=""></icon>
</pinboard>