【问题标题】:replacing version range with sed用 sed 替换版本范围
【发布时间】:2012-08-30 09:17:52
【问题描述】:

我正在尝试替换版本范围 1.6,1.7 和 1.7,1.8 如下。

sed -i 's/version\>[1.6,1.7)/version\>[1.7,1.8)/g'

我已经尝试转义 [,),。等等,但它仍然不匹配 [1.6,1.7)

我错过了什么?

这是我用来替换版本的完整命令:

find . -iname 'pom.xml' -print -exec sed -i 's/version\>\[1.6,1.7)/version\>[1.7,1.8)/g' {} \;

GNU sed 4.1.5 版

Linux ** 2.6.18-238 #1 SMP Fri Oct 28 08:42:39 PDT 2011 x86_64

更新:

sed -i 's/version\>.*1.6,1.7)/version\>[1.7,1.8)/g' 

为我工作。但这还是太笼统了。

【问题讨论】:

  • 请编辑您的帖子以包含 sed --versionuname 的输出。祝你好运。
  • 你说的太笼统是什么意思?请发布您希望sed 编辑的行的示例,以及您不希望sed 更改的行。
  • @Thor - 我使用 .* 避免了这个问题

标签: linux sed


【解决方案1】:

我不完全明白。你想匹配什么字符串?如果是version>[1.6,1.7),这个替换应该可以工作:

s/version>\[1\.6,1\.7)/version>[1.7,1.8)/g

> 不需要转义,但[ 和点应该转义,因为它们有特殊含义。

【讨论】:

  • 那不正确 - 我知道你需要逃跑 >。问题出在 [ 字符中。
  • 对不起 - 我忘了提到我在 shell 中运行它。 > 是重定向操作符,所以我不得不转义。
  • @Fakrudeen:不。表达式周围的单引号会阻止 shell 解释 >
  • 是的 - 你是对的 - 但这不是问题。它仍然正确匹配 version>。在关于工作的帖子中查看我的编辑。这与 [
  • 用反斜杠转义它,如 '\[' 应该可以。你也可以试试 '[[]' 这应该也可以。
猜你喜欢
  • 1970-01-01
  • 2021-12-07
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 2015-09-04
  • 1970-01-01
相关资源
最近更新 更多