sed,如何用变量和字符串组合替换字符串?

时间:2017-02-11 17:17:26

标签: bash variables sed substitution

下面的代码行将两个不同的固定字符串添加到行的开头和结尾。

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中将字符串变量合并到行的开头并与fixedstring结合?

1 个答案:

答案 0 :(得分:2)

如果替换字符串来自变量,则Sed是一个糟糕的选择,因为它将变量视为sed命令而不是文字字符串,因此如果变量包含/或{等特殊字符,它将会中断{1}}或类似的。

Awk更适合这项任务,例如:

&

对于inplace修改,您需要最新版本的GNU 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 参数。

对于它的价值,如果你在单引号之外引用变量,那么该命令似乎会起作用,但它会有点错误:

-i inplace