我有一个文件,其中模式字符串重复ABC:10
,就像我正在寻找的那样,每次在文件中都ABC:10
必须将其转换为XYZ:5
技巧部分是数字部分,例如 10,它是基于时间的,所以每次我下载文件时它都会改变,所以我们可以考虑X
数字:
ABC:X
-> XYZ:(X-5)
。
在文件中,数字始终相同,但是当我重新下载文件时,它会根据时间表发生变化。另外,身份识别不能丢失也很重要。
对于下面的文件示例,基本上每次我看到等级3剩余:58.1天我都需要修改等级3剩余 -> DATA 和 58.1-> 28.1 (X-30)。每次下载文件时,等级3剩余总是相同的,但数字基本上是剩余天数,所以每过一天就会减少1。
文件示例:
port: 6666
socks-port: 6699
redir-port: 6669
allow-lan: true
mode: Rule
log-level: info
external-controller: 0.0.0.0:9090
dns:
enable: true
ipv6: false
# listen: 0.0.0.0:53
# enhanced-mode: fake-ip
nameserver:
- 223.5.5.5
- 114.114.114.114
# - 'tls://dns.rubyfish.cn:853'
#fallback:
# - 'tcp://208.67.222.222:443'
# - 'tls://1.0.0.1:853'
# - 8.8.8.8
proxies:
- type: ss
server: test.com
port: 49679
password: test.com
cipher: aes-128-gcm
name: ♥流量:300.93GB 等级3剩:57.8天
proxy-groups:
- name:
答案1
尝试
awk -v days=30 '/等级3剩/ { for(i=1;i<=NF;i++)
if ( $i ~ /等级3剩:/ ) { split($i,A,":") ; $i = "DATA:" A[2]-days "天" ;}}
{print;}'
在哪里
/等级3剩/
选择“等级3剩”行for(i=1;i<=NF;i++) if ( $i ~ /等级3剩:/ )
循环参数寻找模式split($i,A,":")
A[1] 和 A[2] 中“:”的分割模式(在本例中)$i = "DATA:" A[2]-days "天" ;
调整值{ print }
打印所有内容(无论行是否被修改)
请注意
为了清楚起见,我将程序放在多行上,您可以一行。
我使用
-v days=30
这样你可以根据需要使用外部变量(例如-v days=$DAYS
)正如评论中提到的,识别似乎丢失了:
- name: