我只想sed
文本文件的最后一个匹配模式。
input文件:
boy boy girl boy
输出文件:
boy boy girl boys
所有你需要的是$
:
sed '$s/boy/boys/'
一种方法是反转文件,只替换第一个匹配,然后再将其反转回去。
tac <file> | sed '1 s/boy/boys/' | tac | sponge <newfile>
tac将“连接并打印文件反向”。 海绵将“吸收标准输入并写入文件”。 它在Debian的“moreutils”包里。
这可能适用于你(GNU sed):
sed '1h;1!H;$!d;x;s/.*boy/&s/' file
将文件啜入内存中,并使用贪婪替换最后一次出现的所需字符串。
另一种更少内存的解决方案:
sed '/.*boy/,$!b;//{x;//p;x;h};//!H;$!d;x;s//&s/' file
这将使用保持空间来保存之前包含所需字符串的行,并在遇到所需字符串的新发生时将其舍弃。 在文件末尾,最后一次出现在保存空间中并被修改。