0

我经常遇到需要在没有最后一部分的情况下获取字符串的所有开头的情况。

例如,没有域名的 FQDN 的主机部分:

www.example.org -> www
foo.bar.example.org -> foo.bar
foo.bar.baz.some.domain.name -> foo.bar.baz.some

(这同样适用于需要去除输入末尾的其他示例。)

为此,我通常混合使用cutrev,例如:

echo "foo.bar.example.org" | rev | cut -d "." -f 3- | rev

这是诀窍,但我想知道是否有更好的方法来做到这一点?

4

1 回答 1

2

With awk you could do:

$ awk '{NF=NF-2}1' FS=. OFS=. file
www
foo.bar
foo.bar.baz.some

Generalize to the last N feilds where N=2:

$ awk '{NF=NF-N}1' FS=. OFS=. N=2 file
www
foo.bar
foo.bar.baz.some

With sed you could do:

$ sed 's/[.][^.]*[.][^.]*$//' file
www
foo.bar
foo.bar.baz.some

Generalized:

$ sed -r 's/([.][^.]*){2}$//' file
www
foo.bar
foo.bar.baz.some
于 2013-07-25T13:17:06.780 回答