Nokta içermeyen bir dosyadan satırlar nasıl silinir?


10

URL'ler içeren veriler içeren bir dosyam var. Ama url olmayan çeşitli çizgiler var. Ubuntu terminal komutlarını kullanarak bunları nasıl kaldırabilirim?

Başvuru için örnek dosya: Sample Data

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

Çıktıya sahip olmak istiyorum:

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

Fazladan istenmeyen satırlarda nokta yoktur. Bu nedenle, çizgileri nokta olmadan kaldırmak istiyorum

Yanıtlar:


30

İle tek yön sed

sed '/\./!d' file
  • /\./değişmez nokta ile eşleş ( \aksi takdirde .herhangi bir karakterle eşleştiği için ile kaçtı )
  • !d eşleşen desen dışındaki her şeyi sil

Dosyayı yerinde düzenlemek istiyorsanız, -itest ettikten sonra komuta ekleyin . (Ayrıca , dosyanın yerel bir yedeğini oluşturmak .bakiçin -ibayrağa ekleyebilirsiniz sed -i.bak ....)

sed -i '/\./!d' file

26

Noktalı her şeyi yeni bir dosyaya karıştırabilirsiniz:

grep "\."  file > newfile

Bu şekilde eski dosyanızı kaydedebilirsiniz.


10

Veya nokta içeren çizgileri saklayın ,

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

8

Bence awksonuncusu partide kayıp:

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

Bu, alan ayırıcıyı noktaya ayarlar. Daha sonra, en az iki alana sahip satırları yazdırmak gerekir: bu, en az bir noktanın oluştuğu anlamına gelir.


3
Daha basit bir awk çözümü bunu grep ile aynı damarda yapmak olacaktır: awk '/\./' file- sadece '.' Karakterini içeren satırları yazdırmak olacaktır.
Chris Midgley

@ChrisMidgley iyi biri! Bu grepzaten cevap ile ne önerdi, ben bazı awk-özel şeyler ile gitmeyi tercih :)
fedorqui

6

Perl kullanarak:

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

6

Bunu vim ile kolayca yapabilirsiniz. Vim'i metin düzenleyicisi olarak kullanmakta rahatsanız (dosyaları açma, düzenleme ve yazma), bunu yapın:

:g!/\./d

Vim'i kullanmaktan çekinmiyorsanız veya bunu komut satırı aracı olarak kullanmayı tercih ediyorsanız, terminalden şunları yapabilirsiniz:

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

Yeni bir dosyaya kaydetmek için bunu biraz değiştirebilirsiniz:

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

Bu, vim'in normal ifadeyle eşleşen (veya eşleşmeyen) her satıra ex komutu uygulayan "global" komutunu kullanır. Bu durumda, komut "(d) elete" dir ve normal ifadeyle eşleşmeyen her komuta uygulanır.\.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.