替换文件中最后一次出现的字符串

时间:2014-01-31 07:31:42

标签: shell search replace sed awk

这是我的文件的样子

Gottagohome saab 90 75n > homelog 2>&1&
Gottagohome saab 90 75n > homelog 2>&1&
Gottagohome saab 90 75n > homelog 2>&1&

这些命令是动态生成的。我想要的是寻找最后一个命令并使其像前一样在前景中运行

Gottagohome saab 90 75n > homelog 2>&1&
Gottagohome saab 90 75n > homelog 2>&1&
Gottagohome saab 90 75n > homelog 2>&1

&应该被敲掉最后一个命令。 知道如何做到这一点。 实际上我还需要在最后一次出现gottogohome命令之前插入等待。也有人可以说那个。 TY 萨姆

5 个答案:

答案 0 :(得分:7)

你可以在awk中使用tac:

tac file | awk '!done && /Gottagohome saab 90 75n/{done=1; sub(/&$/, "")}1' | tac

答案 1 :(得分:6)

这可能适合你(GNU sed):

sed '$s/.$//' file

编辑:

迎合 last Command

sed -r '/(Gottagohome saab 90 75n.*)&\s*$/M,$!b;//{x;//p;x;h};//!H;$!d;x;s//\1/' file

答案 2 :(得分:3)

$ awk -v RS= '{sub(/&$/,"")}1' file
Gottagohome saab 90 75n > homelog 2>&1&
Gottagohome saab 90 75n > homelog 2>&1&
Gottagohome saab 90 75n > homelog 2>&1

答案 3 :(得分:1)

要使用&

删除最后一个awk
awk '{a[NR]=$0} END {for (i=1;i<NR;i++) print;NF-=1;print}' OFS="" FS="" file
Gottagohome saab 90 75n > homelog 2>&1&
Gottagohome saab 90 75n > homelog 2>&1&
Gottagohome saab 90 75n > homelog 2>&1

另一个版本

awk 'NR>1 {print f}{f=$0} END {print substr($0,1,length($0)-1)}' file

答案 4 :(得分:1)

awk 'NR==FNR{if(/^Gotta/) a=NR;next} {if (FNR==a) sub(/&$/,"")}1' file file