如何使用sed和变量插入新行

时间:2014-10-25 05:49:44

标签: bash awk sed

我正在尝试使用关键字"已购买"提取最后一个条目。并附加到特定字符串后面的下一行(替换已存在的行。例如

order.log的内容

discounted
order56

运行脚本

disc=$(cat status.log | grep discounted | tail -1)
sed '/discounted/a $disc' order.log

如果光盘的输出是order59,那么order.log应该如下所示

discounted
order59
由于某些原因,我的sed命令无法工作

sed '/discounted/a $disc' order.log

3 个答案:

答案 0 :(得分:1)

变量替换不会在单引号中发生'使用双引号intsead " "

order行使用后替换匹配discounted的行

 sed  "/discounted/,2 s/order.*$/$dist/" order.log

将产生输出

discounted
order59

/discounted/,2在模式匹配2后选择/discounted/行并应用替换。

s/order.*$/$dist/如果该行与order.*$模式匹配,则替换为$dist的内容

整个命令以双引号" "

给出

答案 1 :(得分:0)

首先检查disc是否确实包含字符串'order59'。

您想要替换“折扣”后面的行。试试:

sed  "/discounted/{n;s/.*/$disc/}"  order.log 

应该可以正常工作。你的命令错过了两件事 - 1.下一行匹配2.变量评估的双引号。

答案 2 :(得分:0)

你可以使用双引号来做到这一点。

disc=$(cat status.log | grep discounted | tail -1)
sed "/discounted/ a $disc" order.log