【发布时间】:2015-10-15 17:47:53
【问题描述】:
我有一个格式如下的 xml 文件:
<list>
<version>1.5</version>
<version>1.4</version>
<version>1.3</version>
<version>1.2</version>
</list>
我的想法是我总是用新版本更新第一个版本标签。当我这样做时,我会替换后续的标签。
例如,当我将 1.6 版本更新为第一个标签(我知道该怎么做)时,以下标签将是:
<list>
<version>1.6</version>
<version>1.5</version>
<version>1.4</version>
<version>1.3</version>
</list>
我尝试了两种选择。
第一个选项: 我的首选选项是搜索 xml 文件并将版本标签 i+1 替换为版本标签 i。比如:
sed -E '2,/<version>.*<\/version>/s#<version>(.*)</c>#<version>\1</version>#' file.xml
我在哪里搜索版本的第二个实例并将其替换为版本的第一个实例(当前不工作)。
第二个选项: 我的第二个选择是将版本标签存储在变量中,例如:
version=$(grep -oPm1 "(?<=version>)[^<]+" file.xml)
version2=$(grep -oPm2 "(?<=version>)[^<]+" file.xml)
然后用版本1替换版本2并进行替换:
sed -i "s/${version2}/${version}/g" file.xml
但是,此选项给出:
sed: -e expression #1, char 9: unterminated 's' command.
当我尝试时:
sed -i "/$version2/s/${version2}/${version}/g" file.xml
我明白了:
未终止的地址正则表达式
显然,任一选项的想法都是将代码放入一个循环中,以便我可以运行它 i 次。但是,我被卡住了,我尝试过的两个选项都不起作用。
【问题讨论】: