Sed,如何用变量和字符串组合替换字符串?
问题描述:
下面的代码行将两个不同的固定字符串添加到行的开头和结尾。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中将字符串变量合并到固定字符串的开头?
答
桑达是一个糟糕的选择,如果替换字符串是一个变量,因为它把该变量作为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}
非常感谢你,在桑达版本的Works很好。这两个单引号吃了我2个小时:) –