gpt4 book ai didi

regex - 如何替换与 egrep 匹配的较大字符串中的子字符串?

转载 作者:行者123 更新时间:2023-11-29 09:18:47 24 4
gpt4 key购买 nike

如何仅针对下方文本中的 IPv6 地址将/32 替换为/128?

52.222.128.45/32
172.22.187.101/32
52.222.128.248/32
2600:2000:2046:2000:3:db06:4200:23a1/32
2600:2000:2046:5800:3:db06:4200:23a1/32
2600:2000:2046:7800:3:db06:4200:23a1/32

期望的输出:

52.222.128.45/32
172.22.187.101/32
52.222.128.248/32
2600:2000:2046:2000:3:db06:4200:23a1/128
2600:2000:2046:5800:3:db06:4200:23a1/128
2600:2000:2046:7800:3:db06:4200:23a1/128

egrep '\:[0-9a-f]{1,4}/32' 与最后四个十六进制字符和/32 匹配,但我如何才能保持相同的四个十六进制字符如何他们只是将/32 更改为/128?

谢谢!

最佳答案

$ cat /tmp/ips
52.222.128.45/32
172.22.187.101/32
52.222.128.248/32
2600:2000:2046:2000:3:db06:4200:23a1/32
2600:2000:2046:5800:3:db06:4200:23a1/32
2600:2000:2046:7800:3:db06:4200:23a1/32
$ cat /tmp/ips | sed 's%\(:[0-9a-f]\{1,4\}\)/32%\1/128%'
52.222.128.45/32
172.22.187.101/32
52.222.128.248/32
2600:2000:2046:2000:3:db06:4200:23a1/128
2600:2000:2046:5800:3:db06:4200:23a1/128
2600:2000:2046:7800:3:db06:4200:23a1/128

正则表达式的描述在这里:https://regex101.com/r/FDjUct/1请注意,% 被用作分隔符而不是 / 以避免必须转义正则表达式中的 / 字符。

看你对sed的熟悉程度,用起来可能更清晰:

$ cat /tmp/ips | sed '/:/s/32$/128/'
52.222.128.45/32
172.22.187.101/32
52.222.128.248/32
2600:2000:2046:2000:3:db06:4200:23a1/128
2600:2000:2046:5800:3:db06:4200:23a1/128
2600:2000:2046:7800:3:db06:4200:23a1/128

以上命令使用sed addresses仅在包含 : 的行上将 32 替换为 128

关于regex - 如何替换与 egrep 匹配的较大字符串中的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50751669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com