0

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

测试.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

4 回答 4

0

使用 Perl:

 perl -pe 's/(ID=")(\d+)/sprintf("$1%d",($2+200))/e' input
于 2013-04-16T15:27:20.560 回答
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
于 2013-04-16T15:27:46.273 回答
0

Perl 解决方案:

perl -pe 's/ID="([0-9]+)"/q(ID=").($1+200).q(")/e' input
于 2013-04-16T15:35:15.723 回答
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
于 2013-04-16T16:11:04.763 回答