Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 查找并替换字符串值后的所有数字,并递增每个数字_Regex_Awk_Sed_Replace - Fatal编程技术网

Regex 查找并替换字符串值后的所有数字,并递增每个数字

Regex 查找并替换字符串值后的所有数字,并递增每个数字,regex,awk,sed,replace,Regex,Awk,Sed,Replace,我试图看看是否可以在几行中实现查找/替换和增加整数值。为了解释,我有以下文本: &sr=1240000000000&type=game&scoreA=x&scoreB=y& &sr=1150000000000&type=game&scoreB=x&scoreB=y& &sr=1270000000000&type=game&scoreC=x&scoreB=y& &sr=1

我试图看看是否可以在几行中实现查找/替换和增加整数值。为了解释,我有以下文本:

&sr=1240000000000&type=game&scoreA=x&scoreB=y&
&sr=1150000000000&type=game&scoreB=x&scoreB=y&
&sr=1270000000000&type=game&scoreC=x&scoreB=y&
&sr=1010000000000&type=game&scoreD=x&scoreB=y&
我只想替换
sr=
之后的数字,直到<代码>&例如,如粗体所示:

&sr=1240000000000&type=game&scoreA=x&scoreB=y&

对于随后找到的每个数字,所有数字都要替换并递增
10000

因此,理想情况下,当我使用如下脚本时(取2个参数,第一个是要替换的值和输入文件):

/script.sh 15000000000 file.txt

它应取代以下所有内容:

&sr=1500000010000&type=game&scoreA=x&scoreB=y&
&sr=1500000020000&type=game&scoreB=x&scoreB=y&
&sr=1500000030000&type=game&scoreC=x&scoreB=y&
&sr=1500000040000&type=game&scoreD=x&scoreB=y&

我编写了一个python脚本来实现这一点,但我想知道是否有人可以建议我使用1-3线性脚本(可能使用AWK/SED)来实现这一点。我的python脚本有点长。

您可以使用这个
awk

awk -v n='10000' -v s='1500000000000' 'sub("sr=[0-9]+&", "sr=" (s+i+n) "\\&"){
i+=n} 1' file


您不需要bash脚本,awk可以自己处理这个问题

awk -v num=1500000000000 '{num += 10000; sub(/^&sr=[0-9]+/, "\\&sr=" num)}1' file > tmpfile
mv tmpfile file

但是如果1240000000000的值未知,会发生什么呢。这可能是不同的值,我只是举了个例子。我对问题进行了编辑,以明确表示抱歉。:)我的意思是:我们将把
15000000000
作为输入参数传递给脚本。但是文本文件中的值,例如,
sr=1240000000000&
在每一行上可能会有所不同,因此在脚本中对其进行硬编码以查找并替换它可能不起作用。在文件中,我们将在
sr=xxx
之后使用随机数。脚本将使用我们传递给脚本的值更新第一个,例如,
15000000000
,然后它将在此后以+10000.Yerp的形式递增每个值,我想既然您是第一个回答,但这两个答案正是我要找的非常感谢。看起来不错。知道我如何将此更改应用于该文件吗?当前它打印到控制台。:)你能给我们看看你目前的工作吗?
awk -v num=1500000000000 '{num += 10000; sub(/^&sr=[0-9]+/, "\\&sr=" num)}1' file > tmpfile
mv tmpfile file