我sed
只想匹配文本文件的最后一个匹配模式。
输入文件:
boy
boy
girl
boy
输出文件:
boy
boy
girl
boys
一种方法是反转文件,仅替换第一个匹配项,然后再次反转它。
tac <file> | sed '1 s/boy/boys/' | tac | sponge <newfile>
tac 将“反向连接和打印文件”。海绵将“吸收标准输入并写入文件”。它在 debian 的“moreutils”包中。
您只需要$
:
sed '$s/boy/boys/'
这可能对您有用(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
这使用保持空间来保存包含所需字符串的先前行,并在遇到所需字符串的新出现时将它们丢弃。在文件末尾,最后一次出现在保留空间中并被修改。