fab*_*reg 2 bash perl awk sed nginx
我有一个字符串包含
fastcgi_cache_path /var/run/nginx-cache15 levels=1:2 keys_zone=MYSITEP:100m inactive=60m;
Run Code Online (Sandbox Code Playgroud)
该脚本的目标之一是根据上一个文件中找到的值将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
Run Code Online (Sandbox Code Playgroud)
也许不是那么优雅,但它确实有效。
另一个目标是增加所有出现的MYSITE x的最后一个字母(在这种情况下,MYSITEP应该成为 MYSITE Q,在 MYSITE P等之后),一旦到达 MYSITE Z将添加另一个字母,例如 MYSITE AA、 MYSITE AB等等等等。
我想是这样的:
sed -i "s/MYSITEP[A-Z]*/MYSITEGG/g" $SITENAME
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为 MYSITEGG 是静态值并且无法使用。如何计算最后一个字母,将其增加到下一个字母,并在到达最后一个 Z 字母后添加另一个字母?
谢谢你!
Perl 的自动增量将适用于字母和数字,与您描述的方式完全相同
我们也可以nginx-cache在处理过程中整理您的增量
我假设保存SITENAME要修改的文件的名称?
它看起来像这样。我必须将捕获分配$1给一个普通变量$n以递增它,因为它$1是只读的
perl -i -pe 's/nginx-cache\K(\d+)/ ++($n = $1) /e; s/MYSITE\K(\w+)/ ++($n = $1) /e;' $SITENAME
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以通过一次替换来完成,如下所示
perl -i -pe 's/(?:nginx-cache|MYSITE)\K(\w+)/ ++($n = $1) /ge' $SITENAME
Run Code Online (Sandbox Code Playgroud)