Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Inhoud uit files verwijderen op basis van input file  (gelezen 1836 keer)

Offline strike

  • Lid
Inhoud uit files verwijderen op basis van input file
« Gepost op: 2010/04/19, 15:51:26 »
Beste,

Een co-webmaster heeft een virus op zijn pc gehad waardoor het ftp wachtwoord uitgelezen werd en zo'n 200 files werden aangepast op mijn hosting.

Ik heb intussen via wat commando's een lijst van die files kunnen bekomen en opgeslagen in een bestandje.

Met volgend commando kan ik ook de lijn verwijderen die overbodig is in de file:
sed -e '/tezoekentekst/d' file.txt >file.txt.new

Ik zie echter nog twee problemen:
- Hoe kan ik file.txt vervangen door de input van mijn file waar alle bestanden in vermeld staan?
- Hoe kan ik alle files die de extensie .new zullen hebben terug de orginele naam geven?
Ik dacht aan een combinatie van rm en mv maar dan met wildcards. Als ik dat doe dan worden de wildcard niet toegepast maar gewoon overgenomen in de bestandsnamen.

Iemand die me wat op weg kan helpen?

Ik ben niet echt een dagelijks linux gebruiker, ken enkel een aantal basis commando's (de sed heb ik via google wat bij elkaar geraapt).

Groeten,
Pieter

Re: Inhoud uit files verwijderen op basis van input file
« Reactie #1 Gepost op: 2010/04/19, 16:22:49 »
for x in `cat lijstmetnamen.txt`; do
    sed -i.old '/tezoekentekst/d' $x
done
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline strike

  • Lid
Re: Inhoud uit files verwijderen op basis van input file
« Reactie #2 Gepost op: 2010/04/19, 17:17:45 »
Beste,

als ik jouw code in een .sh file giet en
sh file.sh doe krijg ik dit:

sed can't read cat: no such file or directory.

Waar de file.sh staat staat ook de txt file lijstmetnamen.txt
Enig idee?
Verder wordt ook een lijstmetnamen.old aangemaakt

Groeten,
Pieter

Re: Inhoud uit files verwijderen op basis van input file
« Reactie #3 Gepost op: 2010/04/19, 18:03:34 »
Beste,

als ik jouw code in een .sh file giet en
sh file.sh doe krijg ik dit:

sed can't read cat: no such file or directory.

Waar de file.sh staat staat ook de txt file lijstmetnamen.txt
Enig idee?
Verder wordt ook een lijstmetnamen.old aangemaakt

Groeten,
Pieter
Ik geloof dat je een ' (aanhalingsteken) hebt gebruikt in plaats van een ` (backtick)....
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline track

  • Lid
Re: Inhoud uit files verwijderen op basis van input file
« Reactie #4 Gepost op: 2010/05/07, 01:09:28 »
In plaats van de backticks: var=`cat lijstmetnamen.txt` kun je evengoed schrijven:  var=$( < lijstmetnamen )  dat leest makkelijker.
(en cat is eigenlijk ook overbodig)
Èn de variabele liefst altijd tussen aanhalingstekens: "$x"  anders gaat het soms mis, mochten er ooit spacies in een bestandsnaam zijn.

Dus:
for x in $( < lijstmetnamen ); do
    sed -i.old  '/tezoekentekst/d'  "$x"
done

track
« Laatst bewerkt op: 2010/05/07, 01:11:47 door track »

Re: Inhoud uit files verwijderen op basis van input file
« Reactie #5 Gepost op: 2010/05/08, 17:39:40 »
In plaats van de backticks: var=`cat lijstmetnamen.txt` kun je evengoed schrijven:  var=$( < lijstmetnamen )  dat leest makkelijker.
(en cat is eigenlijk ook overbodig)
Èn de variabele liefst altijd tussen aanhalingstekens: "$x"  anders gaat het soms mis, mochten er ooit spacies in een bestandsnaam zijn.

Dus:
for x in $( < lijstmetnamen ); do
    sed -i.old  '/tezoekentekst/d'  "$x"
done

track
Erm, als he je het helemaal juist wilt hebben...
IFS='
' for x in $( < lijst.txt ); do
   sed -i.old '/tekst/d' "$x"
done
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net