【问题标题】:Bash - Find and replace regex with another stringBash - 用另一个字符串查找并替换正则表达式
【发布时间】:2016-11-24 22:57:55
【问题描述】:

我有以下字符串 libVersion = '1.23.45.6',我需要将 1.23.45.6 替换为 1.23.45.7

显然版本可以是任何具有类似格式的数字(不一定是 4 个数字)。

我尝试使用以下但不起作用

echo "libVersion = '1.23.45.6'" |sed "s/([0-9\.]+)/1.23.45.7/g"

【问题讨论】:

  • echo "libVersion = '1.23.45.6'" |sed "s/[0-9.]\+/1.23.45.7/g"
  • echo "libVersion = '1.23.45.6'" |sed "s/'[^']*'/'1.23.45.7'/g"
  • 宾果游戏!!!请把它放在答案中,以便我标记为正确答案
  • 实际上,您可以在正则表达式 (sed -E "s/([0-9.]+)/1.23.45.7/") 中使用 E 选项。但是,如果您想替换一次,/g 是多余的,而 (...) 是多余的,因为您没有使用捕获的值。我会使用sed -E "s/[0-9.]+/1.23.45.7/"

标签: regex bash parsing sed


【解决方案1】:

基本sed,即不带任何参数的sed 使用BRE(基本正则表达式)。在BRE 中,您必须转义+,以带来正则表达式+ 的强大功能,它重复前一个标记一次或多次,对于捕获组\(regex\) 也是如此

echo "libVersion = '1.23.45.6'" | sed "s/[0-9.]\+/1.23.45.7/"

您也可以使用否定字符类来替换单引号中存在的所有字符。

echo "libVersion = '1.23.45.6'" | sed "s/'[^']*'/'1.23.45.7'/"

由于替换应该只发生一次,因此您不需要g 全局修饰符。

【讨论】:

  • @wiktor 你在开玩笑吧:P
猜你喜欢
  • 2014-07-17
  • 2021-05-18
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多