我想替换下面文本文件中的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 :(得分: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