sed
その行に複数のピリオドがある場合は、最初のピリオドまですべてを削除し、ファイル全体に対してこれを実行します。
sedの前:
akamai.com
cdnjs.cloudflare.com
com.cdn.cloudflare.net
sed後:
akamai.com
cloudflare.com
cdn.cloudflare.net
承認された回答:
$ sed '/\..*\./s/^[^.]*\.//' file
akamai.com
cloudflare.com
cdn.cloudflare.net
sed
スクリプトは最初に、正規表現\..*\.
を使用して、少なくとも2つのドットを含む行を照合します。 ([.].*[.]
と書かれている可能性もあります )。これに一致する行については、最初のドットまでのすべてを削除する置換が実行されます。
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
ここでは、ドットで区切られたフィールドが3つ以上ある場合は常に、現在の行をドットで分割し、最初のフィールドをスキップして、そこから現在のレコードを再作成します。末尾の1
最後に、すべての行(変更されているかどうかに関係なく)が印刷されます。
短いawk
sed
と同じ方法で 解決策:
$ awk -F '.' 'NF > 2 { sub("^[^.]*\.", "") } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net