grep - ayırıcı belirtecinden sonra metni kaldırma


12

;Her satırda ilk sonra her şeyi ortadan kaldırmak için gereken bir dosya var .

Yani böyle bir dosya:

sdfsdsdf;
fsdfsddf;sdfsd;

Bunun sonucu:

sdfsdsdf
fsdfsddf

İçine baktım grepve sed. Bu komutlardan birini içeren bir cevabı takdir ediyorum.

Yanıtlar:


5

sed muhtemelen bu durumda awk veya perl'den daha kolay ve hızlıdır:

sed 's/^\([^;][^;]*\);.*$/\1/' some_file_name

6
Bu olması gerekenden daha karmaşık! sed 's/;.*//'
Gilles 'SO- kötü olmayı kes'

Naçizane size katılmıyorum. perl -pe 's /;.*//' some_file_name, büyük dosyalarda çalışırken aynı derecede kolay ve tartışmalı olarak% 1500'e kadar daha hızlıdır.
kod başlığı

Sed'in kullanılabildiği ancak perl'in bulunmadığı birkaç sistemim var, bu yüzden yeterli oldukları yerde daha hafif çözümler kullanmayı teşvik ediyorum.
dubiousjim

7

başka bir seçenek cutkomutu kullanmaktır

cat a.file | cut -d';' -f1

9
kedi

3

Genellikle awkböyle şeyler için kullanın :

cat a.file | awk -F=";" '{ print $1 }'

Bu, bir dosyanın her satırını alır ve ilk grubu sınırlayıcıdan önce yazdırır -F


7
yararsız kullanımı cat.
sonraki duyuruya kadar duraklatıldı.

1
İkinci Dennis orada. Linux ve BSD altında -F = ";" amaçlandığı gibi çalışmaz. Ve bunu 1 $ 'dan da teklif etmek isteyebilirsiniz: awk -F ";" '{print $ 1}' a.file
kod başlığı

2

GNU kullanarak bunu yapmanın bir yolu grep:

grep -Po "^[^;]+(?=;?)" filename

Gnu grep olmadan: grep -Eo '^[^;]+;' filenameneredeyse anlıyor, sadece bir karakteri çok fazla yazdırıyor. grep -Eo '^[^;]+' filenameneredeyse alır, ancak aynı zamanda tam olmayan (boş olmayan) satırlar da yazdırır ;.
dubiousjim
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.