我想出了这个正则表达式
[0-9]+:"https:\/\/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/
匹配此数据
...
21:"https://10.0.0.0/blah"
...
我最想要的是
...
4:"blah"
...
其中减去的金额是https://部分的长度。要减去的数字是不变的,即IP地址总是相同的,所以我正在寻找某种替代方式,比如伪正则表达式
s|[0-9]+:"https:\/\/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/|($1-17):"|g
其中17是长度,但我无法想出能够执行此操作的内容。我想我需要其中一个神奇的perl one liners。这些数据也都在MySQL数据库中,因此我可以在SQL中做正确的事情,但对分组选项不熟悉,以及在SQL中是否可以使用算法。
我也明白正则表达式不能做算术(除了那个神奇的算法)
也许AWK最适合这个?我之前从未使用过AWK,所以需要做一些阅读
答案 0 :(得分:2)
您正在寻找的是:
perl -pe 's{^(\d+)(:")(https://[\d.]+/)}{ ($1 - length($3)) . $2 }e' file
键是e
修饰符,用于评估替换部分中的代码。
答案 1 :(得分:0)
awk
救援!
$ awk -v FS="[:\"/]" '/[0-9]+:"https:\/\/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\//
{print $1-17 ":\"" $(NF-1) "\"" }' file
4:"blah"