2017-02-11 97 views
1

下面的代码行将两个不同的固定字符串添加到行的开头和结尾。Sed,如何用变量和字符串组合替换字符串?

sed -i 's/.*/somefixedtext,&,someotherfixedtext/' ${f} 

somefixedtext,20,30,10,50,someotherfixedtext 

我想用一个变量,给我下面来提高输出,而不是什么上面;

HELLO,somefixedtext,20,30,10,50,someotherfixedtext 

尝试了一些变化,但都以失败告终;

VARIABLE="HELLO" 
sed -i 's/.*/"$VARIABLE,somefixedtext,&,someotherfixedtext/' ${f} 

如何在sed中将字符串变量合并到固定字符串的开头?

回答

2

桑达是一个糟糕的选择,如果替换字符串是一个变量,因为它把该变量作为sed命令而不是文字字符串,因此,如果变量包含特殊字符,例如/&或类似这将打破。

AWK是更适合这个任务,例如像:

$ cat file 
20,30,10,50 

$ var=hello 

$ awk -F, -v prefix="$var" -v OFS=, '{print prefix, "sometext", $0, "somethingelse"}' file 
hello,sometext,20,30,10,50,somethingelse 

对于就地修改,您将需要一个新版本的GNU的awk,和-i inplace参数。

对于它的价值,该命令会奏效,如果你用双引号的变量,单引号外面,但是这将是一个有点马车:

VARIABLE="HELLO" 
sed -i 's/.*/'"$VARIABLE"',somefixedtext,&,someotherfixedtext/' ${f} 
+1

非常感谢你,在桑达版本的Works很好。这两个单引号吃了我2个小时:) –