Sida 1 av 1

Ta bort rad i textfil [löst]

Postat: 03 apr 2009, 11:22
av rylleman
Jag försöker i ett skript få bort en rad från en textfil men jag lyckas inte hur jag än gör.

just nu ser kodraden jag försöker med ut såhär;

Kod: Markera allt

sed "s/$stripped.lst//" $stripped.lst
Alltså, texten på raden är samma som filnamnet som bestäms på annat håll i skriptet.
Jag har provat otaliga varianter på min sed-rad utan att få till det.

Någon som kan vägleda?

Re: Ta bort rad i textfil

Postat: 03 apr 2009, 12:02
av Konservburk
Det är för det första skillnad på att ta bort en rad och ta bort alla tecken på en rad. I det ena fallet blir det en rad mindre i filen, i det andra blir det en tomrad kvar istället.

Men med din sed-kod tas inte ens alla tecken bort, utan bara bara exakt de tecken som ingår i värdet av variabeln $stripped.lst.

Det viktigaste frågan är dock om $stripped.lst bara är ett filnamn eller en fullständig sökväg? Som du har utformat din sed-kod så får inte $stripped.lst innehålla något / över huvud taget. Gör den det så blir det med största sannolikhet en massa fel.

Re: Ta bort rad i textfil

Postat: 03 apr 2009, 12:21
av rylleman
$stripped.lst är bara filnamnet, inte någon sökväg.
$stripped är variabeln, .lst är filändelsen, är det där felet ligger? at jag försöker ta bort en variabel som inte finns, $stripped.lst istället för $stripped med filändelse?
Om jag vill ta bort hela raden där $stripped.lst finns istället för alla tecken på raden, vad ska jag använda då?

Re: Ta bort rad i textfil

Postat: 03 apr 2009, 12:31
av Konservburk
rylleman skrev:$stripped.lst är bara filnamnet, inte någon sökväg.
Då antar jag att du befinner dig i rätt katalog när du kör sed-kommandot?
rylleman skrev:$stripped är variabeln, .lst är filändelsen, är det där felet ligger? at jag försöker ta bort en variabel som inte finns, $stripped.lst istället för $stripped med filändelse?
Nej, jag var nog lite otydlig där. Variabeln är bara $stripped, och inget mer. Om den innehåller t.ex. ordet varmkorv så kommer $stripped.lst att ersättas med varmkorv.lst
rylleman skrev:Om jag vill ta bort hela raden där $stripped.lst finns istället för alla tecken på raden, vad ska jag använda då?

Kod: Markera allt

sed "/$stripped.lst/d"

Re: Ta bort rad i textfil

Postat: 03 apr 2009, 14:00
av rylleman
Tack, jag får det märkligt nog inte att funka även när jag använder din sista kod.

Så här ser hela kodstycket ut som skapar och modifierar textfilen;

Kod: Markera allt

cd $foldername
echo -e 'FPS 25\n' > $stripped.lst
ls >> $stripped.lst
#sed "s/$stripped.lst//" $stripped.lst  #--funkar inte!
sed "/$stripped.lst/d" #funkar inte heller...
Jag listar innehållet i mappet till textfilen men vill inte ha med själva textfilen så jag försöker ta bort den raden.
Textfilen skapas korrekt och filerna listas men jag får inte bort sista raden...

Re: Ta bort rad i textfil

Postat: 03 apr 2009, 14:18
av Konservburk
Då är det inte själva sed-koden som är problemet, utan mer hur du använder den. Du måste till att börja med på något sätt ange vilken fil sed ska jobba mot. Sedan måste du även tala om var resultatet ska hamna:

Kod: Markera allt

sed "/$stripped.lst/d" < "$stripped".lst > "$stripped".lst.restultat
Vill du skriva över orginalfilen så är tanken att du ska ersätta den med resultatet efteråt på egen hand:

Kod: Markera allt

mv -f "$stripped".lst.restultat "$stripped".lst
GNU sed kan göra det åt dig, men det fungerar inte med vilken version av sed som helst, så det är då inte säkert att du kan använda ditt skript överallt.

Kod: Markera allt

sed -i "/$stripped.lst/d" "$stripped".lst
rylleman skrev:Jag listar innehållet i mappet till textfilen men vill inte ha med själva textfilen så jag försöker ta bort den raden.
Då kan jag tipsa dig om att det är lättare och snyggare om du tar bort raden innan du sparar ner resultatet av ls till din fil:

Kod: Markera allt

ls | sed "/$stripped.lst/d" >> "$stripped".lst

Re: Ta bort rad i textfil

Postat: 03 apr 2009, 14:42
av rylleman
Konservburk skrev: Då kan jag tipsa dig om att det är lättare och snyggare om du tar bort raden innan du sparar ner resultatet av ls till din fil:

Kod: Markera allt

ls | sed "/$stripped.lst/d" >> "$stripped".lst
Tack, det där gjorde precis vad jag ville.
Jag känner att jag borde sätta mig in mer i sed och andra kommandon men jag har inte riktigt tid så när jag behöver skapa något skript så blir det mest att googla efter liknande kod utan att jag kanske inte riktigt förstår vad jag gör...
Men jag får ju användbara skript i slutändan, även om vägen dit är lite knögglig.

Re: Ta bort rad i textfil

Postat: 04 apr 2009, 04:17
av David Andersson
rylleman skrev: #sed "s/$stripped.lst//" $stripped.lst #--funkar inte!
sed "/$stripped.lst/d" #funkar inte heller...[/code]
De funkar för mej (om jag tar bort # före första sed och lägger till filnamn $stripped.lst efter sista). Obs att resultatet inte sparas i en fil utan visas i terminalen. Därför kan man säga att det inte funkar i egentlig mening, men att Konservburks lösning gör det.

Tänk på: om stripped="massa" så kommer inte bara filen "massa.lst" att excluderas utan även "mandelmassa.lst" och liknande.

Re: Ta bort rad i textfil

Postat: 04 apr 2009, 09:42
av rylleman
David Andersson skrev: Tänk på: om stripped="massa" så kommer inte bara filen "massa.lst" att excluderas utan även "mandelmassa.lst" och liknande.
Tack, men just det är inga problem eftersom skriptet skapar mappen och alla filer i den så allt som finns där är en png-sekvens och .lst-textfilen.