» »

[ Linux ] Kako zbrisati določene vrstice iz več fajlov hkrati?

[ Linux ] Kako zbrisati določene vrstice iz več fajlov hkrati?

pingec ::

Imam 100MB logov in bi jih rad nekako prefiltriral. Logi imajo en event na eno vrstico, rad bi pa deletal v njih samo vrstice, ki vsebujejo dve besedi ne glede na njuno zaporedje ali besede ki so med njima.

Mislim, da ne bo to tezko za izkušene uporabnike linuxa :)
Normalnost je povprečje nenormalnih ljudi.

JamesBond ::

find /direktorij -name "*.*" | xargs perl -pi -e 's/original_string/novi_string/g'

Evo.

Edit: Ajks, to ni natanko to kar hočeš. Bom probal popraviti.

Zgodovina sprememb…

BigWhale ::

Poglej si grep in find... :)

pingec ::

ok z grep mi rata dobit ven tisto kar hocem pobrisat, kako pa to pobrisem?
Normalnost je povprečje nenormalnih ljudi.

Gwanaroth ::

cat imeloga.log | grep -v beseda1 | grep -v beseda2 > novilog.log

Prefiltrirani log se ti shrani v novilog.log

Pod beseda1, beseda2 das pac tvoje stringe, ki bi jih rad pobrisal.
Lights often keep secret hypnosis..

JamesBond ::

Zdaj pa daj tako, da bo iskalo po direktoriju/poddirektorijih in brisalo vrstice z stringi po vseh fajlih..

JamesBond ::

Evo ti ukaz:

find /direktorij -name "*.*" | xargs perl -pi -e 'if(/STRING/){s/^.*$//s}'

pingec ::

JamesBond bom sprobal.


Gwanaroth
cat imeloga.log | grep -v beseda1 | grep -v beseda2 > novilog.log
to sem tudi sam pogruntal samo to mi nardi nov fajl jst bi pa rad da trenutne, že obstoječe editira (ven pobriše)
Normalnost je povprečje nenormalnih ljudi.

Jean-Paul ::

Nekaj v slogu:

for i in `find . -name "*.log"`;
do
sed -i '/aaa/d' "$i";
done

aaa zamenjas s poljubnim regexom - vsaka vrstica, ki ustreza temu regexu, bo zbrisana.

Pazi: sed-ovo stikalo -i pomeni "edit files in place". Predhodno temeljito preveri, da vidis, ce res dela to, kar zelis. Naredi backup. Backup kopije lahko naredi tudi sed sam, ce mu ukazes -i.bak

P.S. man sed

pingec ::

thx =)
Normalnost je povprečje nenormalnih ljudi.

Brane2 ::

Lahko tudi v bashu bereš vrstico za vrstico in jo, če ne ustreza filtru, pišeš na izhod.
Nekaj v stilu:

#! /bin/bash
# Uporaba: _skript_ dir output_file
for fname in $1 ;
do {
while read vrstica ;
do { if !grep tralal_etc ;
then echo $vrstica ]/$2
};
done [$1
done

PS: Namesto znaka za večje in manjše sem uporabil oglate oklepaje.

Kako hudiča postat kodo na ST ? A ni bil včasih en knof za inkludanje kode ?
On the journey of life, I chose the psycho path.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Bash osnove

Oddelek: Programiranje
241980 (770) Brane22
»

grep - čisto malo pomoči ;)

Oddelek: Programiranje
192305 (1782) c0dehunter
»

bash grep

Oddelek: Programiranje
51368 (1015) boogie_xlr
»

Regexp, grep, awk problem?

Oddelek: Programiranje
251674 (1396) Brane2
»

Skripte (strani: 1 2 )

Oddelek: Programiranje
508633 (6496) Microsoft

Več podobnih tem