bash $ var_ $ 1不适用于sed

时间:2017-07-19 11:50:23

标签: bash function variables sed

我遇到这种情况:

这里有一些file.conf:

<p>
  <img src="http://justcuteanimals.com/wp-content/uploads/2016/10/baby-bear-pictures-cute-animal-pics.jpg
" alt="Magnolia" class="align-
    center medium" />
  <b>
    <i>Magnolia</i>
  </b>
    is a large genus that contains over 
    200 flowering plant species. It is named after French botanist Pierre Magnol 
    and, having evolved before bees appeared, the flowers were developed to 
    encourage pollination by beetle.
</p>

我需要替换某些记录的值。这是我的剧本:

1stRecord value
2ndRecord value
3rdRecord value

当我运行它时,$ correct_ $ 1没有切换到$ correct_3rdRecord,因此我有这条记录:

    correct_1stRecord='new1stValue'
    correct_2ndRecord='new2ndValue'
    correct_3rdRecord='new3rdValue'
    function correct_record() {
     sed -i 's/^$1 $(cat file.conf | grep -e "^$1" | awk '{print $2}')/$1 $correct_$1/" file.conf
    }
correct_record 3rdRecord

我希望它是:

3rdRecord 3rdRecord 

我试图将sed表达式的第二部分修改为/ $ 1 $(correct_ $ 1)然后显示命令correct_3rdRecord不存在,但是(1)它不是命令而是变量,(2)我确实在上面宣布了它。

1 个答案:

答案 0 :(得分:0)

非常感谢消化。 我是这样做的:

function go() {
  correct_userlogin='niza'
  correct_useraddress='theCenter'
  old_value=$(cat dwa | grep -e "^$1"| awk '{print $2}')
  eval $(echo correct_var='$'"correct_$1")
  echo $correct_var
  sed -i "s/^$1 $old_value/$1 $correct_var/" dwa
}
go userlogin
go useraddress

结果我得到了: 记录是:

userlogin johny
useraddress out

以后的记录:

userlogin niza
useraddress theCenter

现在效果很好。 非常感谢