2013-04-16 81 views
0

我想在下面的文本文件中替換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 

回答

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 
+0

它是在shell中打印輸出,如何避免它? –

+0

添加一個'>> new_file'來將結果插入到一個新文件中,然後將它移動到'test.txt' – fedorqui

+0

謝謝,它工作正常。 –

0

用Perl:

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

Perl的解決方案:

perl -pe 's/ID="([0-9]+)"/q(ID=").($1+200).q(")/e' input 
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