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