2011-07-08 119 views
0

我想用变量替换该值。以下因sed中使用的单引号不起作用。用变量替换文本

#!/bin/sh 
set myvarM='pqr' 
sed 's/:P03:M15/:P02:M1$myvarM/' mychange.txt > new_mychange.txt 

我可以改变sed命令还是应该使用别的东西?

+2

改用'''代替,将允许变量扩展 –

+0

谢谢,第二个问题是set! – shantanuo

回答

2
#!/bin/sh 
myvarM='pqr' 
sed "s/:P03:M15/:P02:M1$myvarM/" mychange.txt > new_mychange.txt 

顺便说一下,使更换就地(即不创建一个新的文件,但修改原始文件),这样做:

sed -i '' "s/:P03:M15/:P02:M1$myvarM/" mychange.txt 

这是说“使用空白作为增量后缀” - 即写出相同的文件名作为输入

2
awk -v val="$myvarM" '{sub(/:P03:M15/, ":P02:M1" val); print}' filename 

注意,在Bourne类型的外壳(‘/ bin/sh的’)的set命令设置位置参数。您的第一行将$1设置为值myvarM='pqr' - myvarM变量将继续未设置。