sed
hapus semuanya sampai dan termasuk titik pertama jika ada lebih dari satu titik pada baris itu dan lakukan ini untuk seluruh file.
Sebelum tidur:
akamai.com
cdnjs.cloudflare.com
com.cdn.cloudflare.net
Setelah sed:
akamai.com
cloudflare.com
cdn.cloudflare.net
Jawaban yang Diterima:
$ sed '/\..*\./s/^[^.]*\.//' file
akamai.com
cloudflare.com
cdn.cloudflare.net
sed
skrip pertama-tama mencocokkan baris yang berisi setidaknya dua titik menggunakan ekspresi reguler \..*\.
(bisa juga ditulis [.].*[.]
). Untuk baris yang cocok dengan ini, substitusi yang menghapus semuanya hingga dan termasuk titik pertama dilakukan.
Menggunakan awk
, agak bertele-tele dibandingkan dengan yang di atas:
$ 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
Di sini, setiap kali ada lebih dari dua bidang yang dibatasi titik, kami membagi baris saat ini menjadi titik-titik, lalu membuat ulang rekaman saat ini dari itu, melewati bidang pertama. 1
di akhir pada akhirnya menyebabkan setiap baris (dimodifikasi atau tidak) untuk dicetak.
awk
lebih pendek dengan cara yang sama seperti sed
solusi:
$ awk -F '.' 'NF > 2 { sub("^[^.]*\.", "") } 1' file
akamai.com
cloudflare.com
cdn.cloudflare.net