如果该行上有多个句点,则 sed 删除所有内容,直到并包括第一个句点,并对整个文件执行此操作

Bjo*_*orn 5 sed awk

sed 如果该行上有多个句点,则删除直到并包括第一个句点的所有内容,并对整个文件执行此操作。

sed 之前:

akamai.com
cdnjs.cloudflare.com
com.cdn.cloudflare.net
Run Code Online (Sandbox Code Playgroud)

sed 后:

akamai.com
cloudflare.com
cdn.cloudflare.net
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 13

$ sed '/\..*\./s/^[^.]*\.//' file
akamai.com
cloudflare.com
cdn.cloudflare.net
Run Code Online (Sandbox Code Playgroud)

sed脚本首先使用正则表达式匹配包含至少两个点的行\..*\.(也可以被写入[.].*[.])。对于与此匹配的行,将执行删除直到并包括第一个点的所有内容的替换。

使用awk, 与上述相比有些冗长:

$ awk -F '.' -vOFS='.' 'NF > 2 { n=split($0, a); $0=""; for (i=2;i<=n;++i) $(NF+1)=a[i] } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net
Run Code Online (Sandbox Code Playgroud)

在这里,只要有两个以上以点分隔的字段,我们就将当前行拆分为点,然后从中重新创建当前记录,跳过第一个字段。最后的尾随1导致打印每一行(修改或未修改)。

awk以与sed解决方案相同的方式缩短:

$ awk -F '.' 'NF > 2 { sub("^[^.]*\.", "") } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net
Run Code Online (Sandbox Code Playgroud)