Bash 替换除最后一个块以外的所有块

Bash 替换除最后一个块以外的所有块,bash,sed,Bash,Sed,我有这个档案: blog.miau.com api.blog.miau.com api.nano.miau.uk willifox.dev.puton.com 我想要这个输出: blog-miau.com api-blog-miau.com api-nan-.miau.uk willifox-dev-puton.com 我如何实现它,我用sed来实现它,但我用全部替换。到-,我想离开最后一个。无需更换。感谢sed,它应该可以: sed 's/\./-/g;s/\(.*\)-/\1\./' f

我有这个档案:

blog.miau.com
api.blog.miau.com
api.nano.miau.uk
willifox.dev.puton.com
我想要这个输出:

blog-miau.com
api-blog-miau.com
api-nan-.miau.uk
willifox-dev-puton.com
我如何实现它,我用sed来实现它,但我用全部替换。到-,我想离开最后一个。无需更换。感谢sed,它应该可以:

sed 's/\./-/g;s/\(.*\)-/\1\./' file
blog-miau.com
api-blog-miau.com
api-nano-miau.uk
willifox-dev-puton.com
s/\/替换所有。与- s/\.\-/\1/将最后一个替换为。
那api.nano.miau.co.uk呢?应该是api nano miau.co.uk吗?输出中的api nan-.miau.uk是一个打字错误吗?如果是这样的话,修复它,如果不是解释它。如果最后一个后面有一个或多个-,该怎么办。e、 g.a.b.c.x-y-z?@Poton如果地球是平的怎么办?如果有www.bbc.co.uk,则应为www-bbc.co.uk等。如果解决方案满足其需求,则由OP做出响应;也许你是对的,但请记住,其他人会阅读这个问题的标题,而不是细节。这个答案的逻辑中有一个固有的缺陷,作为程序员,我们喜欢掩盖所有角落的情况,以制定防弹解决方案。通过一些调整,可以轻松实现这一点,例如sed'y/-/-\n/;s/\.\-/\1./;y/\n/-/'文件