23

我一直在尝试增加 .xml 文件中的变量。标签可能在文件中出现 100 次或仅两次。我正在尝试添加一个值,该值将增加数次。我已经包含了一些我正在处理的示例代码,但是当我运行脚本时它只会放置一个并且不会进一步增加。关于我做错了什么的建议会很好。

for xmlfile in $(find $DIRECTORY -type f -name \*.xml); do
  TFILE="/tmp/$directoryname.$$"
  FROM='><process>'
  TO=' value\=""><process>'
  i=0
  while [ $i -lt 10 ]; do
    i=`expr $i + 1`
    FROM='value\=""'
    TO='value\="'$i'"'
  done
  sed "s/$FROM/$TO/g" "$xmlfile" > $TFILE && mv $TFILE "$xmlfile"
done

while循环是我刚刚用来测试代码的东西。它将插入<process>但不会插入增量。

我的最终目标:

<process>value="1"</process>
<process>value="2"</process>
<process>value="3"</process>
<process>value="4"</process>

依此类推,只要<process>文件中存在它就需要增加。

4

5 回答 5

33

我刚刚测试了你的代码,它似乎正确地增加了i.

您可以尝试从以下位置更改您的增量语法:

i=`expr $i + 1`

i=$((i+1))
于 2012-11-14T19:54:04.467 回答
20

对于适当的增量bash,请使用 for 循环(C 风格):

n=10
for ((i=1; i<=n; i++)) {
    printf '<process>value="%d"</process>\n' $i
}

输出

<process>value="1"</process>
<process>value="2"</process>
<process>value="3"</process>
<process>value="4"</process>
<process>value="5"</process>
<process>value="6"</process>
<process>value="7"</process>
<process>value="8"</process>
<process>value="9"</process>
<process>value="10"</process>

笔记

expr是古代shell代码中用来做数学的程序。在 bash 这样的 Posix shell 中,使用 $(( 表达式 ))。在 bash 和 ksh93 中,您也可以使用(( expression ))orlet expression如果您不需要在扩展中使用结果。

编辑

如果我误解了您的需求并且您有一个包含如下空白值的文件:

<process>value=""</process>

试试这个 :

$ perl -i -pe '$c++; s/<process>value=""/<process>value"$c"/g' file.xml
<process>value"1"</process>
<process>value"2"</process>
<process>value"3"</process>
<process>value"4"</process>
<process>value"5"</process>
<process>value"6"</process>
<process>value"7"</process>

-i开关编辑文件真实,所以要小心。

于 2012-11-14T21:30:55.467 回答
11

这是在 bash 中增加变量的最简单方法:

i=0
((i++))
于 2014-08-01T17:59:42.207 回答
3

这也有效。

将变量声明为整数。

declare -i i=0

然后你可以像这样递增:

i+=1
于 2019-08-15T16:19:53.377 回答
1

使用awk

awk '{gsub( "value=\"\"", "value=" i++ ); print }' i=1 input-file

value=""这将用value="1",等替换字符串value="2"。您可以轻松更改起始值和增量(例如..."value=" i ); i+=5; print

于 2012-11-14T20:22:11.540 回答