BASH脚本,正确引用sed内部的变量?

时间:2014-04-21 23:54:40

标签: bash shell sed

这个变量, BTR = “/家/ BB / PL / DDR /”; 成功回应,所以我知道它应该可用,但这些都不能正常工作。

我尝试过的语法变体,其中没有一个可行。

1

    Lg=$(echo "${Prg}" | sed 's/\(\/home\/in\/PL\/\)\(.*_Data.txt\)$/'$Btr'\2/');

2

    Lg=$(echo "${Prg}" | sed 's/\(\/home\/in\/PL\/\)\(.*_Data.txt\)$/'${Btr}'\2/');  

3

    Lg=$(echo "${Prg}" | sed 's/\(\/home\/in\/PL\/\)\(.*_Data.txt\)$/"$Btr"\2/');  

4

    Lg=$(echo "${Prg}" | sed 's/\(\/home\/in\/PL\/\)\(.*_Data.txt\)$/"${Btr}"\2/');  

5

    Lg=$(echo "${Prg}" | sed 's/\(\/home\/in\/PL\/\)\(.*_Data.txt\)$/'"$Btr"'\2/');  

6

    Lg=$(echo "${Prg}" | sed 's/\(\/home\/in\/PL\/\)\(.*_Data.txt\)$/"'$Btr'"\2/');  

7

    Lg=$(echo "${Prg}" | sed -e "s/\(\/home\/in\/PL\/\)\(.*_Data.txt\)$/'${Btr}'\2/");  

8

    Lg=$(echo "${Prg}" | sed -e 's/\(\/home\/in\/PL\/\)\(.*_Data.txt\)$/'${Btr}'\2/');  

目标是改变像这样的一行:

| tee -a /home/in/PL/SomeFile_Data.txt

到此:

| tee -a /home/BB/PL/DDr/SomeFile_Data.txt

2 个答案:

答案 0 :(得分:1)

没有双引号:

a=1
echo 'b' | sed 's/b/'$a'/'

双引号:

a=1
echo 'b' | sed "s/b/$a/"

使用单引号模式和双引号变量:

a=1
echo 'b' | sed 's/b/'"$a"'/'

答案 1 :(得分:0)

@ fstd的回答。更改分隔符。

  Lg=$(echo ${Prg} | sed 's,/home/in/PL/\(.*_Data\.txt\)$,'$Btr'\1,')