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)