【问题标题】:Find and replace all numbers after a string value and increment each one查找并替换字符串值后的所有数字并递增每个数字
【发布时间】:2019-04-15 15:50:43
【问题描述】:

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

&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 1500000000000 文件.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 脚本有点长。

【问题讨论】:

  • 你能向我们展示你到目前为止的工作吗?

标签: regex awk sed replace


【解决方案1】:

你不需要 bash 脚本,awk 可以自己处理

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

【讨论】:

  • 看起来不错。知道如何将此更改应用于文件吗?目前它打印到控制台。 :)
【解决方案2】:

你可以使用这个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&

【讨论】:

  • 但是如果不知道值 1240000000000 会发生什么。它可能是不同的值,我只是举了一个例子。我编辑了问题以明确表示抱歉。:)
  • 我的意思是:我们会将1500000000000 作为输入参数传递给脚本。但是文本文件中的值,例如sr=1240000000000& 可以在每一行上有所不同,因此在脚本中对其进行硬编码以查找并替换它可能不起作用。
  • 在文件中,sr=xxx 后面会有随机数。脚本将使用我们传递给脚本的值更新第一个,例如1500000000000 之后它会以 +10000 递增。
  • 是的,我想既然你先回答了,但两个答案正是我想要的! - 非常感谢。
猜你喜欢
  • 2014-08-11
  • 2022-11-16
  • 1970-01-01
  • 2022-11-15
  • 2015-08-23
  • 2012-02-07
  • 2013-02-25
  • 1970-01-01
  • 2011-07-08
相关资源
最近更新 更多