我在目录中有一堆具有此模式的文件:version="0"
。它可以是任何数字。但我不想影响<?xml version="1.0" ?>
部分。这条线可能不在第一行,所以我们不能跳过第一行。
主要的问题是sed和awk的gsub并不适用于lookbehind。我认为做双重工作是可以接受的。替换所有版本,然后修复所有xml版本。但是sed with -r missunderstand the capture groups。
到目前为止我所拥有的:
sed -r 's#(\<\?xml .*)version="[^"]*"(.*\?\>)#\1version="1.0"\2#g' fixing xmls
答案 0 :(得分:0)
要更改XML文档中的所有version
属性,以下XMLStarlet命令就足够了:
xmlstarlet ed --inplace \
-u '//*[@version="0"]/@version' -v 1 \
/your/directory/*.xml
答案 1 :(得分:0)
我想我有点做到了:
find test -exec sed -i 's/version="[^"]*"/version="800"/g' {} \; -print | xargs -I FILE sed -i 's#\(<?xml \)version="[^"]*"\(.*\)#\1version="1.0"\2#g' FILE
其中800是理想值。但仍然是双重工作。
答案 2 :(得分:0)
如果您不将<
用于word boundary,请不要逃避>
和sed -r 's#(<\?xml .*)version="[^"]*"(.*\?>)#\1version="1.0"\2#g' file
。试试这个:
.*
那就是说你应该避免使用贪婪的任何字符 sed -r 's#(<\?xml[^>]*)version="[^"]*"([^>]*)\?>#\1version="1.0"\2?>#g' file
模式。更安全的命令是:
document.getElementById('btNext').innerHTML = '';
var image = document.createElement('<img>');
image.src = 'images/myarrow.jpg';
document.getElementById('btNext').appendChild(image);