Soru Bir toplu iş dosyası aracılığıyla txt dosyasındaki belirli satırları silme


Oluşturulmuş bir txt dosyası var. Bu dosya gereksiz olan ve kaldırılması gereken belirli satırlara sahiptir. Kaldırma gerektiren her satırın satırdaki iki dizeden biri vardır; "HATA" veya "REFERANS". Bu belirteçler satırın herhangi bir yerinde görünebilir. Diğer tüm satırları korurken bu satırları silmek istiyorum.

Yani, txt dosyası şu şekilde görünüyorsa:

İyi veri hattı
C: \ Directory \ ERROR \ myFile.dll dosyasının bozuk satırı
Başka bir iyi veri satırı
yanlış çizgi: REFERANS
Iyi hat

Dosyanın böyle olmasını isterim:

İyi veri hattı
Başka bir iyi veri satırı
Iyi hat

TIA.


59
2018-01-07 01:59


Menşei




Cevaplar:


Aşağıdakileri kullanın:

type file.txt | findstr /v ERROR | findstr /v REFERENCE

Bu, sedef / awk / perl ve bunun gibi özellikleri bulup yüklemek yerine, Windows işletim sistemindeki standart araçları kullanmanın avantajına sahiptir.

Operasyon için aşağıdaki transkript bakın:

C: \> file.txt yazın
İyi veri hattı
C: \ Directory \ ERROR \ myFile.dll dosyasının bozuk satırı
Başka bir iyi veri satırı
yanlış çizgi: REFERANS
Iyi hat

C: \> file.txt yazın findstr / v HATA | findstr / v REFERENCE
İyi veri hattı
Başka bir iyi veri satırı
Iyi hat

86
2018-01-07 02:12



Harika, sadece aradığım çizgi. - chrome
Bu kesin sorunu vardı ve SO burada bulundu. Tanrı yığın taşma korusun! - Matt Rogish
Tamamlamak için: çıktıyı bir dosyaya yazmak için "> output.txt" (tırnak işareti olmadan) eklemeniz gerekir. - Burkhard
Teşekkürler, bu sadece sevdiğim şekilde hızlı ve kolay oldu! - Kuberchaun
teşekkürler, bu bana yardımcı oldu ama bir uyarı söz, boşluklar dahil olmak üzere bazı konular vardı ve / c kullanmak zorunda kaldı: bu yüzden komut şöyle görünecekti: type file.txt | findstr / v / c: "HATA" | findstr / v / c: "REFERANS". Ayrıca, dosya için en üstte olduğunu bildiğiniz satırları kesmeniz gerekiyorsa, daha fazla + <n> ile işaretleyin, burada <n> şerit kesilecek satır sayısıdır. - Apeiron


@ Paxdiablo ile aynı çözümü yalnızca kendi başına kullanarak bulabilirsiniz. Birden çok komutu birbirine bağlamak gerekmez:

findstr /V "ERROR REFERENCE" infile.txt > outfile.txt

Bunun nasıl çalıştığı ile ilgili ayrıntılar:

  • / v, arama dizesiyle eşleşmeyen çizgiler bulur (paxdiablo'nun kullandığı anahtar)
  • Arama dizesi tırnak içinde ise, her kelimeyi kullanarak bir OR araması gerçekleştirir (ayırıcı boşluktur).
  • findstr bir giriş dosyası alabilir, "tip" komutunu kullanarak metni beslemeniz gerekmez
  • "> outfile.txt", sonuçları outfile.txt dosyasına gönderir, bunun yerine bunları konsolunuza yazdırır. (Varsa dosyanın üzerine yazacağını unutmayın. Eklemek istiyorsanız, bunun yerine ">> outfile.txt" kullanın.)
  • Büyük / küçük harfe duyarlı olmayan bir eşleşme yapmak için / i anahtarını eklemeyi de düşünebilirsiniz.

35
2018-04-18 18:47



yazın! INSTALLED_APPS! | findstr / v "@ //"> temp_filter_out_junk.txt> nul 2> & 1 - Mike Q


Eğer başın varsa:

sed -e '/ REFERENCE / d' -e '/ HATA / d' [FILENAME]

FILENAME, metin dosyasının iyi ve kötü satırların adıdır.


5
2018-01-07 02:10





Perl'iniz varsa, o zaman perl -i -n -e"print unless m{(ERROR|REFERENCE)}" hile yapmalı.


1
2018-01-07 02:12