【发布时间】:2017-03-01 20:50:32
【问题描述】:
我有一个包含
的字符串fastcgi_cache_path /var/run/nginx-cache15 levels=1:2 keys_zone=MYSITEP:100m inactive=60m;
此脚本的目标之一是根据在前一个文件中找到的值将 nginx-cache 增加两位数。为此,我使用了以下代码:
# Replace cache_path
PREV=$(ls -t /etc/nginx/sites-available | head -n1) #find the previous cache_path number
CACHE=$(grep fastcgi_cache_path $PREV | awk '{print $2}' |cut -d/ -f4) #take the string to change
SUB=$(echo $CACHE |sed "s/nginx-cache[0-9]*[0-9]/&@/g;:a {s/0@/1/g;s/1@/2/g;s/2@/3/g;s/3@/4/g;s/4@/5/g;s/5@/6/g;s/6@/7/g;s/7@/8/g;s/8@/9/g;s/9@/@0/g;t a};s/@/1/g") #increment number
sed -i "s/nginx-cache[0-9]*/$SUB/g" $SITENAME #replace number
也许不那么优雅,但它确实有效。
另一个目标是增加所有出现的 MYSITEx 的最后一个字母(在这种情况下,MYSITEP 应该变成 MYSITEQ,在 MYSITEP 等之后,一旦 MYSITEZ 到达,添加另一个字母,如 MYSITEAA, MYSITEAB等
我的想法是这样的:
sed -i "s/MYSITEP[A-Z]*/MYSITEGG/g" $SITENAME
但它不能工作,因为 MYSITEGG 是一个静态值,不能使用。 如何计算最后一个字母,将其递增到下一个字母,一旦到达最后一个 Z 字母,再添加另一个字母?
谢谢!
【问题讨论】:
-
Perl 递增字母。我建议您需要
perl -p -e解决方案。如果您愿意,请添加标签。