递归替换动态值

时间:2013-04-16 15:22:13

标签: linux unix sed

我想替换下面文本文件中的ID值。现在它是从1到200.我希望它从201到400开始。

的test.txt

paraCR="0566 and 0675" ID="1" 
paraCR="0566 and 0675" ID="2" 
.
.
paraCR="0566 and 0675" ID="200"

我尝试使用以下脚本,但它无效。

#!/bin/bash
for (( i=1,k=201; i<=200; i++,k++ ))
do
   find . -type f -name "test.txt" -exec sed -i'' -e 's/i/k/g' {} +
done

4 个答案:

答案 0 :(得分:0)

使用Perl:

 perl -pe 's/(ID=")(\d+)/sprintf("$1%d",($2+200))/e' input

答案 1 :(得分:0)

这里有一种没有for的方法:

i=201
while read line
do
   echo $line | sed -s "s/ID\=\"[0-9]*\"/ID\=\"$i\"/g" >> new_file
   i=$(( $i + 1))
done < test.txt
mv new_file test.txt

答案 2 :(得分:0)

Perl解决方案:

perl -pe 's/ID="([0-9]+)"/q(ID=").($1+200).q(")/e' input

答案 3 :(得分:0)

如果你正在使用bash,你可以避免使用外部程序:

while IFS= read -r line
do
    if [[ "$line" == *ID=* ]] ; then
        id=${line##*ID=\"}
        id=$(( ${id%\"*} + 200 ))
        echo "${line%ID=*}ID=\"$id\""  >> outfile
    else
        echo "$line" >> outfile
    fi
done < infile
mv outfile infile