Kısmen çıktı komut satırı ekranını dosyaya


4

Yedekleme çözümü için bir günlük dosyası yazıyorum.

Yedekleme çözümü basit bir 7-zip güncelleme komutudur.

Hangi dosyaları yedeklediğini kaydetmek istiyorum. >> log.txt kullanırsam sonucu alırım, fakat 7-zip çıkmasını istemediğim birçok bilgiyi alırım.

Ekranda ne olduğunu kısmen kaydetmenin bir yolunu arıyorum. 7z ....> templog.txt dosyasını kullanmayı ve sonra log.txt dosyasına eklemeden önce templog.txt dosyasına bir şey yapmayı umursamıyorum. Ancak, satırları templog.txt dosyasından da komut satırından seçici olarak nasıl çıkaracağımı bilmiyorum.

Bu yüzden sorumun azaldığını tahmin ediyorum: İlk 10 satırı templog.txt dosyasından nasıl kaldırabilirim veya alternatif olarak ekranın çıktısının bir kısmını bir günlük dosyasına nasıl yönlendirebilirim?

Bonus soru: Satırları templog.txt dosyasından veya başlangıçta olmayan çıkış yönlendirmesinden seçici olarak nasıl kaldırırım?

Yanıtlar:


2

İlk 10 satırı templog.txt dosyasından nasıl kaldırabilirim veya alternatif olarak ekrandaki çıktının bir kısmını bir günlük dosyasına yönlendirebilir miyim?

Aşağıda, Findstr ile belirli dizeleri olan satırları atlamak için ne istediğinizi, başka bir deyişle SED ile belirli satır numaralarını templog.txt dosyasından log.txt dosyasının tam günlük dosyasına eklemeden önce kaldırmasını istediğiniz birkaç farklı yol vardır. .


FINDSTR Kullanımı

Bu, templog.txt dosyasındaki çift tırnak içindeki dizgelerin log.txt dosyasına eklenmesini engeller

FINDSTR /V /I "string1 string2 string3 string4" templog.log>>log.txt

Bu, /C:templog.txt dosyasındaki her bir anahtarın log.txt dosyasına eklenmesinden sonraki çift tırnak içindeki normal ifadeleri çıkarır, böylece atlamak için eşleştirmeniz gereken her normal ifadeye sahip olduğunuzdan emin olmanız gerekir.

FINDSTR /V /R /C:"<regex1>" /C:"<regex2>" /C:"<regex3>" templog.log>>log.txt

SED kullanımı

Bu, 1 - 10 satırlarını templog.txt dosyasından kaldıracak ve daha sonra bu işlemin kalanını log.txt dosyasına ekleyecektir.

sed -i -e "1,10d" templog.txt

Ek Kaynaklar


Findstr'a baktım ancak gerçek dizeler yerine kelimeleri aradığı veya regex kullanmam gerektiğinden, ihtiyaçlarıma uymuyor gibi görünüyordu. SED kullanarak ancak yapar. Yine de herhangi bir ek yazılım gerektirmeyen uygun bir çözüm görmeyi çok isterim. Bu cevap kesinlikle verilen bir + 1'i hakediyor. Bunu kabul etmeden önce daha fazla cevap verilip verilmediğini görmek için birkaç gün daha bekleyeceğim.
LPChip

Regex bir kesinlikle daha ilginç. Yeni dosyanın da ötesinde, tüm dosyanın içeriği üzerinde regex yapabilir mi? Yani bir dize bulursam, örneğin 8 satır aşağıya inen başka bir dize bulana kadar oradan tamamen kaldırılsın mı?
LPChip

@ LPChip findstrsatır sonları arasında arama yapabilir. Bkz ss64.com/nt/findstr-linebreaks.html
DavidPostill

2
@ LPChip Windows FINDSTR komutunun belgelenmemiş özellikleri ve sınırlamaları nelerdir? dbenham tarafından (yerleşik toplu dosya gurusu) okumaya değer ...
DavidPostill

Windows 8.1 veya 10 ve tempfile çıktısı büyük olasılıkla 20 ila 30 satır olacak, ancak aşırı durumlarda, dosya hala 1 mb altında olduğunu varsayalım. Findstr sınırları içinde. Findstr'a gittikçe daha fazla dalmak, hedefimi en hızlı şekilde gerçekleştirmek için eşleşmeyi diğer dosya seçeneğine karşı kullanabilirim.
LPChip

1

PowerShell - Bir Dosyadan Belirli Satırları Kaldırma

Templog.txt dosyasının içeriğinden Select-Object-Skip parametresini kullanarak ilk beş satırı atlamak için aşağıdaki PowerShell komutlarını kullanabilir ve ardından atlamak için atlanan bu dosya satırları dışındaki her şeyi güncelleyebilirsiniz.

(Get-Content "C:\path\templog.txt" | Select-Object -Skip 5) | Set-Content "C:\path\templog.txt"

Templog.txt dosyasının ilk beş satırını atlamak için Select-Object-Skip parametresini kullanarak aşağıdaki PowerShell komutlarını kullanabilir ve ardından tüm satırları log.txt dosyasına ekleyebilirsiniz.

(Get-Content "C:\path\templog.txt" | Select-Object -Skip 5) | Add-Content "C:\path\log.txt"

Ek Kaynaklar


Güzel fikir, ama ne yazık ki ne istediğim için bu pratik değil. Ancak kutunun dışında düşünmek için +1. :)
LPChip
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.