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

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

26

Anda dapat menangkap semuanya dengan titik ke file baru:

grep "\."  file > newfile

Dengan begitu Anda dapat menyimpan file lama Anda.


10

Atau pertahankan garis yang mengandung titik ,

sed -ni.bak '/\./p' infile

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.


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

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\.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.