Bagaimana cara menghapus baris dari file yang tidak mengandung titik?

10

Saya memiliki file yang berisi data termasuk url. Tetapi ada berbagai garis yang bukan url. Bagaimana saya bisa menghapusnya menggunakan perintah terminal Ubuntu?

Berikut adalah contoh file untuk referensi: Sampel Data

com.blendtuts/S
°=
com.blengineering.www/:http
±=

Saya ingin memiliki output:

com.blendtuts/S
com.blengineering.www/:http

Garis-garis ekstra yang tidak diinginkan tidak memiliki titik. Karenanya, saya ingin menghapus garis tanpa titik

Jaffer Wilson
sumber

Jawaban:

30

Satu jalan dengan sed

sed '/\./!d' file
  • /\./cocok dengan titik literal (lolos dengan \karena jika tidak .cocok dengan karakter apa pun)
  • !d hapus semuanya kecuali pola yang cocok

Jika Anda ingin mengedit file di tempat, tambahkan -iperintah setelah pengujian. (Anda juga dapat menambahkan .bakke -ibendera sed -i.bak ...untuk membuat cadangan file lokal.)

sed -i '/\./!d' file
Zanna
sumber
26

Anda dapat menangkap semuanya dengan titik ke file baru:

grep "\."  file > newfile

Dengan begitu Anda dapat menyimpan file lama Anda.

Fl.pf.
sumber
10

Atau pertahankan garis yang mengandung titik ,

sed -ni.bak '/\./p' infile
αғsнιη
sumber
8

Saya pikir awkyang terakhir tidak ada di pesta:

$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http

Ini mengatur pemisah bidang ke titik. Kemudian, itu adalah masalah mencetak garis-garis yang memiliki setidaknya dua bidang: ini berarti bahwa setidaknya satu titik terjadi.

fedorqui
sumber
3
Solusi awk yang lebih sederhana adalah melakukannya dengan nada yang sama dengan grep: awk '/\./' file- yaitu, hanya mencetak garis yang mengandung karakter '.'.
Chris Midgley
@ChrisMidgley bagus! Karena ini adalah jawaban yang grepsudah disarankan, saya lebih memilih untuk pergi dengan beberapa awkhal-hal khusus :)
fedorqui
6

Menggunakan perl:

perl -i -ne 'print if /\./' /path/to/file
abligh
sumber
6

Anda dapat melakukan ini dengan cukup mudah dengan vim. Jika Anda merasa nyaman menggunakan vim sebagai editor teks (membuka, mengedit, dan menulis file), maka lakukan ini:

:g!/\./d

Jika Anda merasa tidak nyaman menggunakan vim, atau Anda lebih suka menggunakannya sebagai alat baris perintah, Anda dapat melakukannya dari terminal:

vim file -c "g!/\./d" -c "wq"

Anda dapat sedikit memodifikasi ini untuk menyimpan ke file baru:

vim file -c "g!/\./d" -c "w newfile" -c "q!"

Ini menggunakan perintah "global" vim, yang menerapkan perintah ex untuk setiap baris yang cocok (atau tidak cocok) suatu regex. Dalam hal ini, perintahnya adalah "(d) elete", dan itu akan diterapkan pada setiap perintah yang tidak cocok dengan regex\.

James
sumber