替换所有版本=" n.n"使用bash

时间:2016-06-14 15:28:58

标签: bash awk sed

我在目录中有一堆具有此模式的文件: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

3 个答案:

答案 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);