【问题标题】:How to replace a version number with sed?如何用sed替换版本号?
【发布时间】:2022-12-17 18:00:49
【问题描述】:
  <package id="Antlr3.Runtime" version="3.5.1" targetFramework="net471" />
  <package id="MathNet.Numerics" version="4.12.0" targetFramework="net471" />
  <package id="NCalcAsync" version="3.1.8" targetFramework="net471" />
  <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net471" />
  <package id="OdicoGeometryOps" version="1.0.0-20221118-143402" targetFramework="net471" />
  <package id="System.ValueTuple" version="4.5.0" targetFramework="net471" />
  <package id="VSDaVinci" version="1.0.0-20221118-143815" targetFramework="net471" />

我有一个这样的包文件,我想使用 sed 更新第 5 行和第 7 行的版本。 另一件值得一提的事情是第 5 行和第 7 行的版本号不是静态的,因此在任何给定点它都可能发生变化。 我怎样才能做到这一点?

编辑: 我的要求可能不是很清楚,所以我再补充几点。我只想更改第 5 行和第 7 行的版本号。这 我将要更改的版本号和我正在更改的版本号是动态的,我将把它作为我将用来更新它的文件的参数。

【问题讨论】:

  • 请添加到您的问题(无评论):您搜索了什么,找到了什么?你尝试了什么,它是如何失败的?
  • 你的要求不明确。您要根据行号还是根据 id 更改版本号?您希望如何指定新版本号?请edit您的问题并添加此信息。
  • 添加了一些cmets

标签: linux unix sed command-line-interface


【解决方案1】:

好的,根据您更新的帖子描述,这可以解决问题

sed -i '5,7s/version="[^"]*"/version="$new_version"/' package.config

$new_version 在哪里。这是新版本的变量。

但是就其他任何事情而言,您需要提供更多描述,因为我不知道您所说的文件参数是什么意思?什么类型的文件,你想要一个你将参数传递给的脚本?

【讨论】:

  • 最好使用捕获组来避免两次写入数据。
  • 是的,你是对的,这可能是一个更好的方法。 sed -i -e '5s/version="(.*)"/version="NEW_VERSION"/' -e '7s/version="(.*)"/version="NEW_VERSION"/' package.config 我有更新了我的帖子
  • 您是否测试了您的替代命令?我的意思是像sed -i 's#(&lt;package id="OdicoGeometryOps" version=")[^"]*(" targetFramework="net471" /&gt;)# .0.1#' package.config
猜你喜欢
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 2020-04-24
  • 2012-08-25
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
相关资源
最近更新 更多