在一个字符串值之后查找并替换所有数字,并递增每个数字

时间:2018-11-12 21:31:25

标签: regex awk sed replace

我正在尝试查看是否可以实现查找/替换并在几行中增加一个整数值。为了解释,我有以下内容:

var accounts = _context.AccountUser
                       .Include(o => o.Account)
                       .Where(o => o.UserId == userId || o.Account.OwnerId == userId)
                       .GroupBy(o => o.Account).Select(og => og.First())
                       .OrderByDescending(o => o.LastAccessed)
                       .Select(o => o.Account);

我只想替换&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&

所有要替换的数字都将由&替换为每个后续的数字...

所以理想情况下,当我按如下方式使用脚本时(采用2个args,首先是要替换为的值,然后是输入文件):

./ script.sh 1500000000000 file.txt

应将所有内容替换为:

10000

我整理了一个python脚本来实现此目的,但想知道是否有人可以在1-3线性脚本中建议我这样做,也许使用AWK / SED。我的python脚本有点长。

2 个答案:

答案 0 :(得分:1)

您不需要bash脚本,awk可以自行处理

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

答案 1 :(得分:0)

您可以使用此awk

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

&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&