回答
一種方法是扭轉文件,僅更換第一匹配,然後再返回扭轉它。
tac <file> | sed '1 s/boy/boys/' | tac | sponge <newfile>
tac將「連接並反向打印文件」。海綿將「吸收標準輸入並寫入文件」。它位於debian的「moreutils」包中。
與'tac> newfile'相比,管道對'海綿'有什麼好處?如果數據很大,缺點是有一個額外的管道需要將數據複製進出,這會降低速度。 –
當我想到這個問題時,我的手指就是這樣,真的。這不是一個強大的,多用途的解決方案,我會授予您的。 – chooban
所有你需要的是$
:
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
它使用保留空間來保存包含所需的字符串,並揭示它們在遇到需要串的新occurence時以前行。在文件末尾,最後一次出現在保存空間中並被修改。
- 1. sed只替換最後一次匹配 - 需要匹配所有
- 2. 爲什麼這個模式只匹配第一個和最後一個
- 3. 用sed替換字符串 - 只有在模式匹配
- 4. 匹配模式只有一次
- 5. 匹配一個圖案,最後一個子模式
- 6. awk或sed:匹配後追加模式到現有行
- 7. 在Perl中匹配最後一個正則表達式模式
- 8. javascript正則表達式匹配只返回最後一個匹配
- 9. XSLT只有一個模板匹配?
- 10. SED提取2次模式匹配後第一次出現
- 11. sed在同一行上匹配模式後插入字符串
- 12. 模式匹配後編輯行,但只在模式匹配後編輯
- 13. 如何使用sed/regex查找最後一個多行匹配?
- 14. 使用sed更改匹配後的第一個匹配
- 15. sed:只打印匹配組
- 16. 模式後匹配模式?
- 17. sed的:一個匹配
- 18. sed兩個字符串之間的模式匹配只顯示第一個匹配
- 19. 模式匹配找到列表的最後一個元素
- 20. 用於模式匹配最後一個實例的值爲
- 21. Python:RE只捕獲第一個和最後一個匹配
- 22. Sed提取兩種模式之間的第一個匹配
- 23. SED:匹配在同一行上的2個模式
- 24. 用sed打印每個匹配模式的第一行
- 25. Sed匹配模式時插入值
- 26. sed替換吃不匹配的模式
- 27. 匹配模式和追加SED
- 28. SED匹配模式\ tTEXT \ t不工作
- 29. 使用sed的空白模式匹配
- 30. SED多模式在行內匹配
http://stackoverflow.com/questions/17114807/sed-replace-last-line-matching-pattern –