替换和删除shell脚本中的字符

时间:2013-04-29 13:48:03

标签: bash sed

我有一个shell脚本来自动构建我的程序。我需要将V4_5_1-RC1等版本号转换为4.5.1-RC1。应删除V_应替换为.。我尝试了几件事,例如sed:

$NAMEEXT = "V4_5_1-RC1"
$lffNameRSC = ${sed -e "s/V//g" <<< $NAMEEXT}
$lffNameRSC = ${sed -e "s/_/./g" <<< $lffNameRSC}
echo $lffNameRSC

但我收到了错误。

./makerelease.sh: line 113: ${sed -e "s/V//g" <<< $NAMEEXT}: bad substitution
./makerelease.sh: line 114: ${sed -e "s/_/./g" <<< $lffNameRSC}: bad substitution

2 个答案:

答案 0 :(得分:5)

  • =
  • 周围不应有空格
  • 应该$(..)而不是${..}来评估命令
  • 变量赋值语句
  • 中不应该有$

使用

#!/bin/bash

NAMEEXT="V4_5_1-RC1"
lffNameRSC=$(sed -e "s/V//g" <<< $NAMEEXT)
lffNameRSC=$(sed -e "s/_/./g" <<< $lffNameRSC)
echo $lffNameRSC

你会得到

4.5.1-RC1

顺便说一句,它可以更轻松,比如

$> echo "V4_5_1-RC1" | sed "s/V//g; s/_/./g"
4.5.1-RC1

答案 1 :(得分:2)

Bash parameter expansion无需任何外部工具即可满足您的需求:

NAMEEXT="V4_5_1-RC1"
version=${NAMEEXT#V}     # remove the leading V
version=${version//_/.}  # replace all _ with .
echo $version            # ==> 4.5.1-RC1