Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

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 1471 keer)

Offline strike

  • Lid
  • Steunpunt: Nee
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

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
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
  • Steunpunt: Nee
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

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
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
  • Steunpunt: Nee
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 »

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
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